集合
集合
JAVA中的集合:是一种工具类,就像是容器,储存任意数量的具有共同属性的对象。
容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表
 
Collection
分为LIST和SET
List: Arraylist、Vector、LinkedList
set: HashSet、LinkedHashSet、TreeSet
CopyOnWriteArrayList:https://segmentfault.com/a/1190000016931825
1. List 有序可重复
- Arraylist:底层数组结构(查询快,增删慢 线程不安全,效率高 ),,,,(扩展补充:System.arraycopy()和Arrays.copyOf()方法、ArrayList的扩容机制)
- Vector:数组(查询快,增删慢 线程安全,效率低 )
- LinkedList:双向链表(查询慢,增删快 线程不安全,效率高 )
LinkedList与 ArrayList 的比较
- ArrayList 基于动态数组实现,LinkedList 基于双向链表实现;
- ArrayList 支持随机访问,LinkedList 不支持;
- LinkedList 在任意位置添加删除元素更快
2. Set 不重复 (根据元素hashCode值是否相同判断唯一性)
- HashSet(无序,唯一):哈希表或者叫散列集(hash table)
- LinkedHashSet:链表和哈希表组成 。 由链表保证元素的排序 , 由哈希表证元素的唯一性
- TreeSet(有序,唯一):红黑树(自平衡的排序二叉树。)
TreeSet: (compareTo方法判断唯一性)(定义比较器排序 )
操作:
共同方法
(1)添加: obj.add(", ");
(2)删除:obj.remove(2);
(3)修改:obj.set(2," ");
(4)获取角标对应元素:obj.get(2);
(5)迭代方法:
1.for(Object b:a){System.out.println(b);}
2.for(int x=0;x<a.size();x++){System.out.println(a.get(x));}
3.Iterator 迭代器
Iterator it=obj.Iterator();
while(it.hasNext()){
Sysout(it.next());
}
其中list 特有的迭代方法: ListIterator
ListIterator g=a.listIterator();
while (g.hasNext()){
Object obj=g.next();
System.out.println(obj);
}
(6)LinkedList 特有的方法
obj.addLast("")、obj.addFirst("")
    obj.removeLast("")、 obj.removeFirst("")
    obj.getLast("")、 obj.getFirst("")
(7)案例:
 ArrayList:
         ArrayList<Integer> arrayList = new ArrayList<Integer>();
         arrayList.add(1);
         arrayList.add(3);
         arrayList.add(5);
         // 三种遍历方式打印元素
         // 第一种:通过迭代器遍历
         System.out.print("通过迭代器遍历:");
         Iterator<Integer> it = arrayList.iterator();
         while(it.hasNext()){
             System.out.print(it.next() + " ");
         }
         System.out.println();
         // 第二种:通过索引值遍历
         System.out.print("通过索引值遍历:");
         for(int i = 0; i < arrayList.size(); i++){
             System.out.print(arrayList.get(i) + " ");
         }
         System.out.println();
         // 第三种:for循环遍历
         System.out.print("for循环遍历:");
         for(Integer number : arrayList){
             System.out.print(number + " ");
         }
         // toArray用法
         // 第一种方式(最常用)
         Integer[] integer = arrayList.toArray(new Integer[0]);
         // 第二种方式(容易理解)
         Integer[] integer1 = new Integer[arrayList.size()];
         arrayList.toArray(integer1);
         // 抛出异常,java不支持向下转型
         //Integer[] integer2 = new Integer[arrayList.size()];
         //integer2 = arrayList.toArray();
         System.out.println();
         // 在指定位置添加元素
         arrayList.add(2,2);
         // 删除指定位置上的元素
         arrayList.remove(2);    
         // 删除指定元素
         arrayList.remove((Object)3);
         // 判断arrayList是否包含5
         System.out.println("ArrayList contains 5 is: " + arrayList.contains(5));
         // 清空ArrayList
         arrayList.clear();
         // 判断ArrayList是否为空
         System.out.println("ArrayList is empty: " + arrayList.isEmpty());
- Map
- HashMap:基于散列表(哈希表的Map接口)实现(哈希表对键进行散列,Map结构即映射表存放键值对)可以使用null值和null键
- LinkedHashMap:HashMap 的基础上加上了链表数据结构
- HashTable:哈希表,不可以存入null键和null值。
- TreeMap:红黑树(自平衡的排序二叉树)
操作:
(1)添加: map.put("1","a");
(2)删除: map.remove("1");
(3)清除: map.clear();
1.List(序列):排列有序,可重复
2.set(集):无序,不可重复
- 
Collection是集合的上级接口,继承它的有Set和List接口 
- 
Collections是集合的工具类,提供了一系列的静态方法对集合的搜索、查找、同步等操作 
Map:
使用键值对存储。Map会维护与Key有关联的值。两个Key可以引用相同的对象,但Key不能重复,典型的Key是String类型,但也可以是任何对象
Arraylist底层使用的是数组(存读数据效率高,插入删除特定位置效率低),LinkedList底层使用的是双向循环链表数据结构(插入,删除效率特别高)
HashSet如何检查重复:HashSet会先计算对象的hashcode值来判断,调用equals()方法来检查hashcode相等的对象是否真的相同。
工具类:
Collections
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号