笔记27--Set、Map、List

来源:互联网 发布:js菜单栏展开收缩切换 编辑:程序博客网 时间:2024/04/29 13:11

说点额外的:

List<T>中的元素可以是null也可以是"",而String为null时调用其方法会报异常。


一、介绍

Collection:最基本的集合接口,一个Collection代表一组Object,即Collection的元素。

1、List:是列表(接口),可以出现重复值,是有序的(即可通过下标访问)。继承自Collection接口。

实现类:

1)ArrayList:由数组实现的List。允许对元素快速随机访问,但是向list中间插入与移除元素的速度很慢。

2)LinkedList:对顺序访问进行了优化,向list中间插入与删除时速度较快,随机访问速度较慢。

3)Vector:与ArrayList区别是:基于线程安全的,但不如ArrayList效率高。其他区别用再了解。

2、Set:是集合,不允许出现重复值。继承自Collection接口。

实现类:

1)HashSet:底层由HashMap实现。

2)LinkedHashSet

3、Map:Map未继承Collection接口,其内容是一组key-value映射。

实现类:

1)HashMap:非线程安全,高效、支持value为null。

2)HashTable:线程安全,低效、不支持value为null。

3)LinkedHashMap

二、增删改查及包含

1、对list:

增:add(位置, 元素)/add(元素)                     删:remove()          改:set()           查:get()          包含:contains()

2、对set:Set<String> set=new HashSet<String>();

增:add(元素)                          删:remove()                      改:不能直接改,可先删再加           查:HashSet无顺序,所以取不到指定位置的值                包含:contains()

3、对map

增:put()                        删:remove()                      改:put() 覆盖原值                查:get()              包含:containsKey()、containsValue()

三、遍历

1、对list:

 第一种:   
 Iterator itr = list.iterator();
while (itr.hasNext()) {
    Object nextObj = itr.next();
}

  这种方式在循环过程中会进行数据锁定,    性能稍差,    同时,如果你想在寻欢过程中去掉某个元素,只能调用it.remove方法,    不能list.remove方法,    否则一定出并发访问的错误.   

   第二种:   
   for(A    a    :    list)    {   
       .....   
   }   
   内部调用第一种,    换汤不换药,    这种循环方式还有其他限制,    不建议使用它       
   第三种:   
   for(int    i=0;    i<list.size();    i++)    {   
       A    a    =    list.get(i);   
       ...   
   }   
   内部不锁定,    效率最高,    但是当写多线程时要考虑并发操作的问题!

2、对set:

1)迭代遍历:
Set<String> set = new HashSet<String>();
Iterator<String> it = set.iterator();
while (it.hasNext()) {
  String str = it.next();
  System.out.println(str);
}
2)for循环遍历:
for (String str : set) {
      System.out.println(str);
}

优点还体现在泛型 假如 set中存放的是Object
Set<Object> set = new HashSet<Object>();
for循环遍历:
for (Object obj: set) {
      if(obj instanceof Integer){
                int aa= (Integer)obj;
             }else if(obj instanceof String){
               String aa = (String)obj
             }
              ........
}

3、对map:

Map map = new HashMap();
Iterator iter = map.entrySet().iterator();
while (iter.hasNext()) {
  Map.Entry entry = (Map.Entry) iter.next();
  Object key = entry.getKey();
  Object val = entry.getValue();
}

0 0
原创粉丝点击