zoukankan      html  css  js  c++  java
  • Java集合list,map,set区别及遍历

    1.1 List、Set、Map基本区别

     1 1List,Set都是继承Collection接口,Map不是 2 
     3 2、List:LinkedList、ArrayList、Vector
     4 
     5   Set :HashSet、LinkedHashSet、TreeSet
     6 
     7   Map:HashMap、HashTable、TreeMap
     8 
     9 3、List元素是有序放入,可重复。(支持for循环,迭代器遍历)
    10 
    11   Set元素无序放入且唯一不可重复,若重复元素则会覆盖。(不支持for循环,支持迭代。原因:元素无序,由改元素的HashCode决定,相对固定)  
    12 
    13 4、List:动态增长,查询效率高,增删效率低(原因:因为有序,所以增加和删除元素会导致其他元素位置改变)
    14 
    15   Set:查询效率低,增删效率高(原因:因为无序,所以增加和删除元素不会导致其他元素位置改变)
    16 
    17 5:、线程安全:Vector、HashTable
    18 
    19   线程不安全:LinkedList、ArrayList、HashSet、HashMap、TreeMap

    1.2 List

    List的特征是其元素以线性方式存储,集合中可以存放重复对象。

    • ArrayList() : 代表长度可以改变得数组。可以对元素进行随机的访问,向ArrayList()中插入与删除元素的速度慢。 
    • LinkedList(): 在实现中采用链表数据结构。插入和删除速度快,访问速度慢。 

    1、添加元素

    1 List<String> list=new ArrayList<String>();
    2 list.add("一个元素");

    2、删除元素

    1 for (int i = 0; i < list.size(); i++)
    2 {
    3     User result = list.get(i);
    4     if (result.getId() == 3)
    5     {
    6     list.remove(result);
    7     System.err.println("id: " + result.getId() + "	name: " + result.getName());
    8     }
    9 }

    3、最基本的两种检索集合中的所有对象的方法: 

     1 1、for循环
     2 for(int i=0; i<list.size();i++){        
     3     System.out.println(list.get(i));    
     4 }
     5 //也可以
     6 for(String str : list){
     7     System.out.println(str);
     8 }
     9 2、迭代器(Iterator)
    10 Iterator it=list.iterator();  
    11     while(it.hashNext()){  
    12     System.out.println(it.next());  
    13 }  

    1.3 Map

    Map是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。

    Map没有继承于Collection接口,从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。 

    1、增删元素操作

    1 Map<String, String> map = new HashMap<String, String>();
    2 map.put("1", "a");        //添加key为1,值为a的元素
    3 map.remove("1");          //删除key为1的所有元素

    2、循环遍历

     1  //第一种:通过Map.keySet遍历key和value,普遍使用,二次取值    
     2 for (String key : map.keySet()) {
     3     System.out.println("key= "+ key + " and value= " + map.get(key));
     4 }
     5 
     6 //第二种:通过Map.entrySet使用iterator遍历key和value:
     7 Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
     8 while (it.hasNext()) {
     9     Map.Entry<String, String> entry = it.next();
    10     System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
    11 }
    12 
    13 //第三种:通过Map.entrySet遍历key和value,推荐,尤其是容量大时
    14 for (Map.Entry<String, String> entry : map.entrySet()) {
    15     System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
    16 }
    17 //第四种:通过Map.values()遍历所有的value,但不能遍历key
    18 for (String v : map.values()) {
    19     System.out.println("value= " + v);
    20 }

    1.4 Set

    Set是最简单的一种集合。集合中的对象不按特定的方式排序,并且没有重复对象。 Set接口主要实现了两个实现类:

      • HashSet: HashSet类按照哈希算法来存取集合中的对象,存取速度比较快。存入HashSet的对象必须定义hashCode()
      • TreeSet :TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序。保存次序的Set, 底层为树结构。使用它可以从Set中提取有序的序列。
      • LinkedHashSet:具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。
    1 Set set=new HashSet();  
    2 String s1=new String("hello");  
    3 String s2=s1;  
    4 String s3=new String("world");  
    5 set.add(s1);  
    6 set.add(s2);  
    7 set.add(s3);  
    8 System.out.println(set.size());    //打印集合中对象的数目 为 2。

    Set 的 add()方法是如何判断对象是否已经存放在集合中? 

    1 boolean isExists=false;  
    2 Iterator iterator=set.iterator();  
    3 while(it.hasNext())           {  
    4     String oldStr=it.next();  
    5     if(newStr.equals(oldStr)){  
    6         isExists=true;  
    7     }  
    8 } 

    Set的功能方法 

    Set具有与Collection完全一样的接口,因此没有任何额外的功能,不像前面有两个不同的List。实际上Set就是Collection,只 是行为不同。(这是继承与多态思想的典型应用:表现不同的行为。)Set不保存重复的元素(至于如何判断元素相同则较为负责) 

    Set : 存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。加入Set的元素必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。

    一个95后程序员的自述: 现在的我还年轻,还有激情,要在有限的时间和激情里实现自我价值.
  • 相关阅读:
    python运行时参数m的作用
    如何设置.net控件SplitContainer平均分配
    不用安装Oracle客户端
    视频聊天APP
    Hadoop框架
    Shell
    Linux
    java14带参的方法
    java13人机猜拳
    java12类的无参方法
  • 原文地址:https://www.cnblogs.com/zhan1995/p/8533271.html
Copyright © 2011-2022 走看看