(五)集合


1 散列表  Map   
  
 散列表概念
  1 容量: 散列表中散列数组大小.
  2 散列运算: key->散列值(散列数组下标)的算法, 
  如: "mm".hashCode()%10->8
  3 散列桶: 散列值相同的元素的"线性集合"
  4 加载因子: 就是散列数组加载率, 一般小于75%性能比较理想
  就是:元素数量/散列数组大小, 如: 7/10=70%
  5 散列查找: 根据Key计算散列值, 根据散列值(下标)找到
    散列桶,在散列桶中顺序比较Key, 如果一样, 就返回value
  6 散列表中Key不同, Value可以重复
  
2 HashMap(关键字:值), 关键字key是唯一不重复的, 查找表
 1) key可以是任何对象, Value可以任何对象,
 2) key:value 成对的放置到集合中
 3) 重复的key算一个, 重复添加是替换操作
 4) 根据key的散列值计算散列表, 元素按照散列值(不可见)排序
 5) 默认的容量: 16 默认加载因子(加载率) 0.75
 6) 根据key检索查找value值
 7) 用于查找场合, 可以提高根据key查找效率


 8) HashMap VS Hashtable
  A HashMap 新, 非线程安全, 不检查锁, 快
  B Hashtable 旧 (1.2以前) 线程安全, 检查锁, 慢一点
  
3 集合框架 (Collection and Map, 集合与映射, 容器类(cpp))
 1) List 元素有先后次序的集合, 元素有index位置, 元素可以重复,继承与Collection接口, 实现类: ArrayList, Vector, LinkedList
 2) Set 元素无续, 不能重复添加, 是数学意义上的集合, 继承与,Collection 接口, 实现类: HashSet(是一个只有Key的HashMap)
 3) Collection 集概念, 没有说明元素是否重复和有序, 使用集合的跟接口, 很少直接使用, 其他集合都是实现类: ArrayList, HashSet
 4) Map 描述了:(key:value) 成对放置的集合, key不重复, Value可以重复. key重复算一个. 实现类: HashMap(散列表算法实现)
 TreeMap(二叉排序树实现,利用Key排序). Map适合检查查找.


4 Java泛型简介
 1) Java5 以后提出的语法现象, 在编译期间期检查的类型约束.运行期不检查泛型!
 2) 可以用来约束类中元素的类型
  
5 集合的迭代(遍历算法)(模仿了数鸡蛋的方式)
 1) 迭代操作: 播放列表 的 全部播放, 将扑克牌全部发放
 2) java使用Iterator 接口描述了迭代模式操作,Iterator 中的方法模式化设计, 专门配合while循环操作
 3) Iterator 的实例可以从集合对象获得, 是这个集合的一个元素序列视图, 默认包含一个操作游标, 在第一个元素之前, hasNext() 方法可以检查游标是否有下一个元素, next() 方法移动游标到下一个元素并且返回这个元素引用. 使用while配合这两个方法, 可以迭代处理集合的所有元素
 4) 迭代时候可以使用迭代器remove() 方法删除刚刚迭代的元素,在迭代过程中, 不能使用集合方法(add, remove, set) 更改集合元素


6 Collections 集合的工具类, Arrays 数组的工具类
 1) 排序, 二分查找, 打乱, 填充等操作 


7 比较大小
 1) Comparable 可以比较的 用于类实现, 实现这个接口表示: 这个类的实例可以比较大小的. 可以进行,默认排序.  Comparable的实现必须与equals() 的结果一致, 就是相等的对象比较结果一定是0! 
 2) Comparator 比较工具, 用于临时定义比较规则, 不是默认比较规则


8 java中的包装类
 1) 包装类可以把基本类型包装为对象类型
 2) 有八种包装类
     int  Integer
     long Long
     byte Byte
     short Short
     float Float
     double Double
     boolean Boolean
     char Character
  3 包装类提供了对应数据类型的工具方法
    Integer.toHexString()
    Integer.toString(int)
    Integer.toBinaryString()
    Integer.parseInt(String)
    "3f"->int
    Integer.parstInt(String, int)
    
    "2.718" -> 2.718 
    Double.parseDouble(String str);
    
自动包装(auto boxing / unboxing)(java5 以后可以):
  Integer i = 2;// i=new Integer(2);
  Object o = 3.5;
  System.out.println(o instanceof Double); //true
  int a = i+1;// a = i.intValue() + 1;
  
注意 
  1 包装类是final的类
  2 包装类对象是不变的, 与字符串类似(不变模式)
    Integer a = 1;
    Integer b = 2;
    a = a+b;
    //a = new Integer(a.intValue() + b.intValue())

  3 包装类覆盖了 toString equals hashCode compareTo


1) 集合复制, 默认的复制规则是浅表(浅层)复制
   A clone() 方法
    
   B 使用复制构造器!
   Map map = new HashMap();
   Map map2 = new HashMap(map);
   
   List list1 = new ArrayList();
   List list2 = new LinkedList(list1);
  2) 同步化(线程安全的)
   List list = new ArrayList();
   //synchronizedList 可以将非线程安全的list包装为线程安全的
   list = Collections.synchronizedList(list); 
   转换以后就相当于 Vector
   HashMap map = new HashMap(); 
   //synchronizedMap 可以将非线程安全的map包装为线程安全的
   map = Collections.synchronizedMap(map);
     
 3) 数组与集合的转换
  a 数组转List(只读的) 
     String[] names = {"A","B","C"};
     List list = Arrays.asList(names);//只读list
     list = new ArrayList(list);//复制为全功能List
     Set set = new HashSet(list);//复制为Set集合
  b 集合转数组
     Object[] ary1 = list.toArray();//集合转Object[]
     String[] ary2 = (String[])list.toArray(new String[]{});//集合转制定类型数组
  
 4) Collection 与 Collections
   Collection 抽象的集合概念,
   Collections 集合静态工具类, 包含集合的工具方法(sort, 打乱(洗牌)等)
 
 5) Map的迭代, Map 是 [Key:Value] 组成的集合
  A 对key:value 进行迭代,map.entrySet();
  B 对Key进行迭代,map.keySet();
  C 对Value进行迭代,map.values();

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值