Java 中对集合 ( Collection 和 Map ) 的总结

来源:互联网 发布:通话魔音软件 编辑:程序博客网 时间:2024/05/11 04:37

 Collection()
       集合层次结构中的根接口
          Collection 对象名 = new 接口的实现类();
  Collection(集合)与Array(数组)的区别:
       1、Array可以存储基本数据类型(值)/引用数据类型(地址)
             Array在创建的时候就要定义类型(只能存储一种数据类型)并且还要确定Length(长度)(长度是固定的)。
       2、集合只能存储引用数据类型(Object可以是任意类型).长度是不确定的(由集合中的元素多少来决定)。
    常用方法:boolean add(E  e)增加元素
              boolean remove(Object obj)删除指定元素
              void clear()清空集合
              boolean contains(Object obj)判断集合是否包含指
定元素
              boolean isEmpty()判断集合是否为空
              int  size()获取元素个数
迭代器Iterator接口:
      使用实例:List  li=new ArrayList();
              Iterator  it=li.iterator();
              while(it.hasNext()){
               Object obj=it.next();
System.out.println(obj+" ");
              }
    解释:hasNext():如果还有元素就可以迭代  返回true
          next() :返回迭代的下一个元素
         Iterator<> 局限性:不能对同一组元素进行多种操作
          例:用两种方式对一组数据进行操作就会产生            
    java.util.ConcurrentModificationException 异常:
                代码示例:
                   List  li=new ArrayList();              
                   Iterator  it=li.iterator();
                    while(it.hasNext()){
                    Object obj=it.next();
   if("break".equals(obj)){//判断是否相等
                     li.remove(obj);//删除元素
                       }
                     }
如果要修改:可以在定义一个新的集合来实现(通过迭代来给ArrayList集合去重):
      ArrayList newlist=new ArrayList();
      ArrayList   list=new ArrayList();
Iterator it=list.iterator();
while (it.hasNext()) {
String temp=(String)iterator.next();
if (!newlist.contains(temp)) {//判断集合newlist是否包含的有temp字符串
    newlist.add(temp);
}
}


List集合:元素是有序的(存取顺序一致)元素可以重复 其元素是以线性方式存储
      常用子类:

         (1)Vector:底层数据结构是数组  查询快 增删满  线程是安全的 效率低  浪费空间
         (2)ArrayList:底层数据结构是数组  查询快 增删慢 线程不安全  效率高
         (3)LinkedList:底层数据结构是双向链表  查询慢 增删快  线程不安全  效率高   
        LinkedList有自己的特有方法:

 LinkedList  li=new  LinkedList();
        li.getFirst();//返回此列表中的第一个元素。
li.getLast();//返回此列表中的最后一个元素。 
li.size();//返回列表长度
li.removeFirst();//从此列表中删除并返回第一个元素。
linkedList.removeLast();//从此列表中删除并返回最后一个元素。


Set集合:无序(存取不一致,不代表随机) 不可重复 无索引
    常用子类:
     (1) HashSet:按照哈希算法来存取集合中的对象  存取速度比较快,当程序向HashSet中 add()的一个对象的时候,先用hashCode方法计算出该对象的哈希码哈希码不一致 添加 哈希码一致 不添加 相同对象不添加
然后用equals判断对象的属性是否一致
比较结果为false就添加 true就不添加 不同对象添加
     (2)LinkedHashSet:底层是双向链表,排重  有序(是Set集合中唯一一个能保证怎么存就怎么取的集合对象)
     (3)底层是二叉树(左中右) 实现了SoetedSet接口 能够对集合中对象进行排序(升序  自然排序  根据ASCLL表大小排序) 排重 只能存储同一类型
    实现排序:
       方式一、实现Comparable接口 重写compareTo方法(自然排序或者是默认顺序排序)
int compareTo
       方式二、Comparator比较器
            使用源码范例:
           (1)通过实现类class Compa implements Comparator{
      public int compare(Object o1, Object o2) {
Student s1=(Student)o1;
Student s2=(Student)o2;
return s1.getAge()-s2.getAge();
          }
                  }
           (2)匿名内部类
               TreeSet tt=new TreeSet(new Comparator() {
public int compare(Object o1, Object o2) {
Student s1=(Student)o1;//获取第一个对象
Student s2=(Student)o2;//获取第二个对象
//三元运算符  关系表达式?表达式一:表达式二
//如果名字相同就返回身高  降序   如果名字不相同 就返回年龄(升序)
return s1.getName().equals(s2.getName())?(int)(s2.getScore()-s1.getScore()):s1.getAge()-s2.getAge();
}
});

遍历集合:
    List:
普通for循环 使用get()获取元素
调用 iterator() hasNext() next()获取元素
增强for循环 只要可以使用Iterator 的类都可以使用
Vector 集合用的是 Enumeration
    Set:
调用 iterator()
增强 for

增强for:是Java1.5的新特性。所谓“增强型的for 循环”,主要也是针对容器。
   for(String ss:arr){//arr指的是当前集合
    System.out.print(ss+",")
   }
Map接口 :将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。 
    Map集合的特点:
        1.根据键来排重 也就是相同键的元素存储在同一个Map集合中 后添加的键值元素会将之前存储的相同的键值元素替代
2.键和值 都需要是引用数据类型Map接口与Collection接口的区别:
     Map:是双列的,键是唯一的(不重复) ,数据结构是针对键有效 跟值无关
     Collection:是单列的,子体系中Set是唯一的,数据结构针对元素有效
  子类:
    (1)、HashTable:底层是哈希表 不可以存入null键null值  线程是同步的  jdk1.0  效率低
    (2)、HashMap:底层是哈希表  可以存入null键null值  线程不同步  jdk1.2 效率高
    (3)、底层是二叉树  线程不同步的  可以用Map集合中的键进行排序
取值方式:
   1.Set<K> keySet() 
   2.Set<Map.Entry<K,V>> entrySet() 

Map接口的的遍历
       HashMap<String,Integer>  hashMap=new  HashMap<>();
       Set<Map.Entry<String, Integer>> 

               entryset=hashMap.entrySet();

Iterator<Map.Entry<String, Integer>>
                  iterator=entryset.iterator();
while (iterator.hasNext()) {
Map.Entry<String,Integer> 
                        entry=iterator.next();
String key=entry.getKey();
Integer va=entry.getValue();
System.out.println(key+"    "+va);
}
//增强for循环
for (Map.Entry<String, Integer> entry:hashMap.entrySet()) {
System.out.println(entry.getKey()+"\t"+entry.getValue());
}

  Collections:是一个类
       sort(List<T> list) 
static <T> int binarySearch(List<? extends 


Comparable<? super T>> list, T key) 
static T max(Collection<? extends T> coll) 
static void reverse(List<?> list) 
static <T> Comparator<T>  reverseOrder() 
static void shuffle(List<?> list) 
static void swap(List<?> list, int i, int j) 


  Collection与Collections的区别:
      Collection是一个集合接口(为集合的顶级接口),它是提供了对集合对象进行基本操作的通用接口方法
      Collections是一个包装类(工具类/帮助类),它包含有各种有关集合的静态方法  不能被实例化。