集合

集合

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(集):无序,不可重复

 

  1. Collection是集合的上级接口,继承它的有Set和List接口

  2. Collections是集合的工具类,提供了一系列的静态方法对集合的搜索、查找、同步等操作

 

Map:

使用键值对存储。Map会维护与Key有关联的值。两个Key可以引用相同的对象,但Key不能重复,典型的Key是String类型,但也可以是任何对象

Arraylist底层使用的是数组(存读数据效率高,插入删除特定位置效率低),LinkedList底层使用的是双向循环链表数据结构(插入,删除效率特别高)

HashSet如何检查重复:HashSet会先计算对象的hashcode值来判断,调用equals()方法来检查hashcode相等的对象是否真的相同。

 

 

工具类:

Collections

 

 

 

 

 

 

 

posted @ 2018-10-19 15:05  StingLon  阅读(141)  评论(0)    收藏  举报