集合类概述

常用集合的继承关系如下图所示:

其中我们常用的就是Collection接口中的Ste接口和List接口。其中最常用的就是ArrayList和LinkedList。

注意:Map、Collection以及其中的Ste和List都是接口,都是不可以被实例化的!

1.Map(映射)

Map 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。 Map没有继承于Collection接口 从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。

a.Map集合中的键对象不允许重复,也就说,任意两个键对象通过equals()方法比较的结果都是false.,但是可以将任意多个键独享映射到同一个值对象上。 

b.Map接口中又分Hasmap和Treemap,他们都是Map接口下的具象class是可以被实例化的

HashMap就是使用对象的hashCode()进行快速查询的。此方法能够显着提高性能。

TreeMap : 基于红黑树数据结构的实现。查看“键”或“键值对”时,它们会被排序(次序由Comparabel或Comparator决定)。TreeMap的特点在 于,你得到的结果是经过排序的。TreeMap是唯一的带有subMap()方法的Map,它可以返回一个子树。 

Map的常用方法:

package com.inba.maya.JiHe;

import java.util.*;


public class Test {

    //Map接口的常用用法! 在Map接口中没有实现Iterator迭代器!
    public static void main1(String[] args) {
        Map<String,String> map=new HashMap<String,String>();
        //添加数据
        map.put("张三", "张三的歌");
        map.put("李四", "李四的歌");
        map.put("王五", "王五的歌");
        map.put("赵六", "赵六的歌");
        map.put("周七", "周七的歌");
        
        //获得key是张三的values值;
        String s=map.get("张三");
        System.out.println(s);
        
        //获得map中所有的key对象组成的Set集合
        Object obj=map.keySet();
        System.out.println(obj);
        
        //获得map中所有的值对象组成的Collection集合
        System.out.println(map.values());
        
        //获得map的集合大小
        System.out.println(map.size());
        
        //是否有key是张三的键,是就返回true,不是就返回false
        System.out.println(map.containsKey("张三"));
        
        //是否有key是王五的歌的值,是就返回true,不是就返回false
        System.out.println(map.containsValue("王五的歌"));
        
        //移除键是王五的键
        map.remove("王五");
        System.out.println(map.keySet()+"*****"+map.values());
        
        //移除所有
        map.clear();
        System.out.println(map.size());
    }

}

打印出来对应的效果:

二:

List接口中社和于自身的方法都与索引有关。因此可以通过对象的索引来操作对象。

List:次序是List最重要的特点:它保证维护元素特定的顺序。List为Collection添加了许多方法,使得能够向List中间插入与移除元素(这只推 荐LinkedList使用。)一个List可以生成ListIterator,使用它可以从两个方向遍历List,也可以从List中间插入和移除元 素。 

List接口下分:

ArrayList:由数组实现的List。允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。ListIterator只应该用来由后向前遍历 ArrayList,而不是用来插入和移除元素。因为那比LinkedList开销要大很多。 

LinkedList :对顺序访问进行了优化,向List中间插入与删除的开销并不大。随机访问则相对较慢。(使用ArrayList代替。)还具有下列方 法:addFirst(), addLast(), getFirst(), getLast(), removeFirst() 和 removeLast(), 这些方法 (没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。

List接口的常用方法:

package com.inba.maya.JiHe;

import java.util.*;


public class Test {
    //Collection接口下List接口的常用方法!
    public static void main(String[] args){
        List<String> list=new ArrayList<String>();//ArryList
        //添加数据add(obj);
        list.add("吕布");
        list.add("典韦");
        list.add("赵云");
        list.add("关羽");
        list.add("马超");
        list.add("张飞");
        //获得list的集合大小
        System.out.println(list.size());
        
        //用来获得一个包中的所有对象,
        Iterator<String> it=list.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
        
        //获得序列号是0.1.2的对象
        System.out.println(list.get(0)+"**"+list.get(1)+"**"+list.get(2));
        
        //指定添加的位置
        list.add(1, "我添加的放在了下标为1的位置");
        for(int i=0;i<list.size();i++){
            System.out.println(list.get(i));
        }
        
        //移除指定位置的对象
        list.remove(0);
        System.out.println(list.get(0));
        
        //替换指定位置的对象
        list.set(0, "替换了");
        System.out.println(list.get(0));
        
        //
        Iterator<String> it2=list.iterator();
        while(it2.hasNext()){
            System.out.println(it2.next());
        }
        
    }

}

效果图:

三:迭代器

Iterator接口位于java.util包下,Iterator接口中有单个方法。

hsaNext():如果仍有元素可以迭代那么返回true,反之返回false。常用于是for循环中的判断条件

next:返回迭代的下一个元素。

remove():从迭代器指向的collection中移除迭代器返回的最后一个元素(可选操作)

除了Iterator可以实现遍历之外,还有一个更强大的ListIterator,它可以实现逆序遍历列表中的元素,示例如下:

package com.inba.maya.JiHe;

import java.util.*;


public class Test {

    public static void main(String[] args){
        List<String> list=new ArrayList<String>();//ArryList
        //添加数据add(obj);
        list.add("吕布");
        list.add("典韦");
        list.add("赵云");
        list.add("关羽");
        list.add("马超");
        list.add("张飞");
     //正序排列
        Iterator<String> it2=list.iterator();
        while(it2.hasNext()){
            System.out.println(it2.next());
        }
        //倒序排列
        ListIterator<String> it3=list.listIterator();
        while(it3.hasNext()){
            it3.next();
        }
        
        while(it3.hasPrevious()){
            System.out.println(it3.previous());
        }
        
    }

}

效果图:

总结:

Collection
 --List:将以特定次序存储元素。
           --ArrayList / LinkedList / Vector
 --Set : 不能含有重复的元素,自行排序
           --HashSet / TreeSet
Map
 --HashMap
 --HashTable
 --TreeMap

 

追加:

取得两个List的交集,retainAll()方法

import Java.util.ArrayList;
import java.util.List;
public class strSplit {
  public static void main(String args[])
  {
   List<String> list1 = new ArrayList<String>();
   List<String> list2 = new ArrayList<String>();
   list1.add("g");
   list1.add("s");
   list1.add("a");
   list1.add("f");
   list2.add("g");
   list2.add("c");
   list2.add("b");
   list2.add("a");
   list1.retainAll(list2);
   System.out.print(list1);
 
  }
}

程序输出结果为:

[g, a]

 

Java中Set巧用,去掉重复数据

Java中Set有这样一个方法,.addAll( Collection c),直接加入List集合,去掉重复的数据。

Java代码  收藏代码
  1. public static void main(String[] args) {  
  2. Set  set=new HashSet();  
  3. set.add("abc");  
  4. set.add("cde");  
  5. set.add("efg");  
  6. set.add("fgh");      
  7. set.add("abc"); //重复的abc,set会自动将其去掉     
  8. System.out.println("size="+ set.size() );  
  9.   
  10. List list = new ArrayList();  
  11. list.add("abc");  
  12. list.add("aaa");  
  13. list.add("fff");  
  14. set.addAll(list); //将list中的值加入set,并去掉重复的abc  
  15. System.out.println("size="+ set.size() );  
  16.   
  17. for( Iterator   it = set.iterator();  it.hasNext(); )  
  18. {               
  19.     System.out.println("value="+it.next().toString());              
  20. }   
  21. }  
posted @ 2017-01-01 20:56  AnswerTheQuestion  阅读(159)  评论(0编辑  收藏  举报