java 中List,Set,Map用法以及区别

来源:互联网 发布:网络打鱼赌博游戏解密 编辑:程序博客网 时间:2024/05/17 02:35

1.List,Set,Map是否继承自Collection接口?

答:List,Set是,Map不是。

如图:

      Collection

  ├List

  │├LinkedList

  │├ArrayList

  │└Vector

  │ └Stack

  └Set

  Map

  ├Hashtable

  ├HashMap

  └WeakHashMap

2.Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java JDK不能提供直接继承自Collection的类,Java JDK提供的类都是继承自Collection的"子接口",如:List和Set。

注意:Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当做一组key集合,一组value集合,或者一组key-value映射。


3.详细介绍:
1)List特点:元素有放入顺序,元素可重复
2)Map特点:元素按键值对存储,无放入顺序
3)Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)


4.List接口有三个实现类:LinkedList,ArrayList,Vector
1)LinkedList:底层基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢
2)ArrayList和Vector的区别:ArrayList是非线程安全的,效率高;Vector是基于线程安全的,效率低


5.Set接口有两个实现类:

   1)HashSet(底层由HashMap实现),

   2)LinkedHashSet


6.SortedSet接口有一个实现类:TreeSet(底层由平衡二叉树实现)


7.Query接口有一个实现类:LinkList


8.Map接口有四个实现类:HashMap,HashTable,LinkeHashMap 和TreeMap
   1)HashMap是一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为null,不允许多条记录的值为null。HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。如果需要同步,可以用Collections.synchronizedMap(HashMap map)方法使HashMap具有同步的能力。
   2)Hashtable与HashMap类似,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,然而,这也导致了Hashtable在写入时会比较慢。
   3)LinkedHashMap保存了记录的插入顺序,在用Iteraor遍历LinkedHashMap时,先得到的记录肯定是先插入的。在遍历的时候会比HashMap慢。有HashMap的全部特性。
   4)TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器。当用Iteraor遍历TreeMap时,得到的记录是排过序的。TreeMap的键和值都不能为空。


10.其实最主要的是:

1)list是用来处理序列的;

2)而set是用来处理集的;

3)Map用于存储键值对,根据键得到值,因此不允许键重复,值可以重复;
 即:set 一般无序不重复,而map是 key—value 结构, list则是有序可以重复。

11.List、Map、Set三个接口,存取元素时,各有什么特点?

List、Map、Set存取元素时的特点是:
1)List 通过下标来存取 和值来存取;
2)Map 键值对应来存取 ;
3)set 存取元素是无序的。

12.下面一段代码,遍历一个List中的元素

Java代码 :

 

import java.util.*;

public class Test{
     public static void main(String [] args){

          List list = new ArrayList();
          list.add(0, "a");
          list.add(1, "b");
          list.add(2, "c");
          list.add(3, "d");

          while(Iterator it = list.iterator();it.hasNext()){
                 Object element = it.next();
                System.out.println (element);
           }
       }
}

 

package com.operation;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

public class User {

      private Integer userId;

      private String userName;

      private String address;

 

      public User(int userId, String userName, String address) {
               this.userId = userId;
               this.userName = userName;
               this.address = address;
      }


      public String getAddress() {
            return address;
      }


      public void setAddress(String address) {
             this.address = address;
     }


     public Integer getUserId() {
            return userId;
    }


    public void setUserId(Integer userId) {
           this.userId = userId;
    }


   public String getUserName() {
          return userName;
   }


    public void setUserName(String userName) {
           this.userName = userName;
    }

 
    public static void main(String[] args) {
           //   Map<Integer, User> map = new TreeMap<Integer, User>();
           //   map.put(1, new User(1,"张三","beijing"));
           //   map.put(2, new User(2,"李四","beijing"));
           // 
           //   map.put(4, new User(2,"王五","beijing"));
          //   map.put(5, new User(2,"钱六","beijing"));
          // 
          //   Set<Integer> keys = map.keySet();
          // 
          ////   Iterator<Integer> it = keys.iterator();
          ////   while (it.hasNext()) {
          ////    Integer key = it.next();
          ////    User user = map.get(key);
          ////    System.out.println("key = " + key + "\t" + "value = " + user.getUserName());
          ////   }
          //  
          //   for (Integer key : keys) {
          //    User user1 = map.get(key);
          //    System.out.println("key = " + key + "\t" + "value = " + user1.getUserName());
          //   }
 
         Set<String> set = new HashSet<String>();
         set.add("a_value");
         set.add("b_value");
         set.add("c_value");
         set.add("d_value");
         set.add("d_value");
         set.add("d_value");
         set.add("d_value");
         set.add("uuu_value");
         set.add("e_value");
    
         Iterator<String> it = set.iterator();
         while (it.hasNext()) {

            //输出下一个元素的值
            System.out.println(it.next());
         }
 
     }

}

转自以下链接文章的内容:

1.http://j2eemylove.iteye.com/blog/1195823

2.http://www.open-open.com/lib/view/open1350440858024.html

原创粉丝点击