集合的体系结构: 由于不同的数据结构, Java为我们提供了不同的集合,但是不同的集合他们的功能都是相似,不断的向上提取,将共性抽取出来,这就是集合体系结构形成的原因。 体系结构: Collection 单列集合顶层接口 List 有索引,可以重复,存取有序 ArrayList 数组 数组:查询快,增删慢。 LinkedList 链表 链表:查询慢,增删快. //Vector Set 没有索引,元素唯一,存储无序 HashSet LinkedHashSet元素唯一,存取有序 Map 双列集合顶层接口 HashMap 键值对,键唯一,没有索引,存取无序 LinkedHashMap 存取有序 集合体系中每层特有的方法 Collection : booleanadd(Object e) 添加元素 voidclear() 清空元素 booleancontains(Object o) 判断集合中是否包含指定的元素 booleanisEmpty() 判断集合是否为空 booleanremove(Object o) 删除指定的元素 intsize() 获取集合的长度 Object[]toArray() 将集合转换成Object类型的数组 Iteratoriterator() 获取迭代器对象 List: voidadd(int index, E element) 在指定位置上添加指定的元素 Eget(int index) 获取指定位置的元素 Eremove(int index) 删除指定位置的元素 Eset(int index, E element) 修改指定位置的元素 ListIterator<E>listIterator()获取列表迭代器 LinkedList: voidaddFirst(E e) 在最前面添加元素 voidaddLast(E e) 在最后面添加元素 EgetFirst() 获取第一个元素 EgetLast() 获取最后一个元素 EremoveFirst() 删除第一个元素 EremoveLast() 删除最后一个元素 Hashset的唯一性原理 hashCode方法: 不重写,Object中。返回的是该对象的内存地址。 重写,如何重写? 保证相同成员变量的对象的哈西值相等的。 尽量保证不同成员变量的对象的哈希值不同。 操作:使用Eclipse生成。 equals方法: 不重写,Object中。比较的是两个对象的地址值。 重写,如何重写? 比较两个对象的每一个成员变量的值。 如果都相同则两个对象相同,如果有不同的,两个对象就不同。 规则:新添加到HashSet集合的元素都会与集合中已有的元素一一比较 首先比较哈希值(每个元素都会调用hashCode()产生一个哈希值) 如果新添加的元素与集合中已有的元素的哈希值都不同,新添加的元素存入集合 如果新添加的元素与集合中已有的某个元素哈希值相同,此时还需要调用equals(Object obj)比较 如果equals(Object obj)方法返回true,说明新添加的元素与集合中已有的某个元素的属性值相同,那么新添加的元素不存入集合 如果equals(Object obj)方法返回false, 说明新添加的元素与集合中已有的元素的属性值都不同, 那么新添加的元素存入集合 Map 双列集合顶层接口 使用map集合存储自定义对象作为key,如何保证元素唯一? 重写自定义类的hashCode方法和equals方法。 Vput(K key,V value) 添加元素,返回被覆盖的value Vget(K key) 根据键查找并返回对应的value booleancontainsKey(K key) 判断集合中是否包含指定的键 booleancontainsValue(V value) 判断集合中是否包含指定的值 Set<K>keySet() 获取到map集合中所有的键 Collection<V>values() 获取到map集合中所有的值 Set<Entry<K,V>>entrySet() 获取到map集合中所有的键值对对象。 集合的遍历方式 单列: 一.转数组 Object[]toArray() 二.迭代器 1.获取迭代器对象Iterator it = 集合.iterator(); 2.使用while循环,如果有元素就获取,没有元素则停止循环 while(it.hasNext()){ System.out.println(it.next());//获取元素并打印 } 三.增强for for(容器中元素的数据类型 变量名 : 容器名){ //遍历出来的每一个元素会存储在这个变量名中。 } 双列: Map集合的遍历方式: 键找值:keySet() 增强for 迭代器 键值对:entrySet() 增强for 迭代器
|