集合

list和set实现了collection接口。

list允许重复的元素,允许多个null元素,和数组一样,基于0的。list接口提供了特殊的迭代器:ListIterable。

list常用实现类:ArrayList、LinkedList、Vector。

ArrayList最流行,提供了使用索引的随意访问;LinkedList对于经常需要list中添加或删除元素的场景。


set不包含重复元素的集合,最多包含一个null元素。实现类:HashSet、LinkedHashSet、TreeSet。

无序容器,最流行的是基于HashMap实现的HashSet。


map常用实现类HashMap、Hashtable、LinkedHashMap、TreeMap。

Map<key,value>将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射一个值、

Map是一个接口,不是collection的子接口或实现类。Map的value可以随意有null值,但是key只能有一个null。


什么场景下使用list、set、map?

如果经常使用索引对容器中元素进行访问,使用list;

如果知道索引,那么list的实现类就用ArrayList;

如果经常添加删除元素,那么就用LinkedList;

如果需要容器中元素有序的存储,则用list;

如果保证插入元素的唯一性,可以用set的实现类;

如果以键值对的形式存储数据,用map。


ArrayList是基于数组实现的,动态数组,容量可自动增长,不是线程安全的。多线程环境下,可以使用concurrent并发包下的CopyOnWriteArrayList类。

ArrayList实现了serializable接口,支持序列化;实现了randomAccess接口,支持快速随机访问;实现了cloneable接口,可以被克隆。

linkedList是list的实现类,基于联表实现的,插入、删除元素速度快,实现了Deque接口。

Hashtable基于Dictionary类是同步的,可以用collections类的synchronizedMap()方法创建一个安全的map对象,并把它作为一个封装对象返回。

HashMap中的key、value允许为空,key只能有一个null,value可以有多个null,是线程不安全的。

Hashtable的key、value不允许为空。Hashtable的所有get/put相关操作都是synchronized的,这相当于对整个哈希表加了一个大锁,多线程访问时,只要有一个线程访问或操作对象,其他的线程都阻塞,所有的操作都是串行化的,这样性能就非常低。

如果容器中有多把锁,那么多线程访问不同段数据,就不会有锁竞争,这样就提高了并发效率。这就是concurrentHashMap的分段锁思想。

concurrentHashMap主干是segment数组,一个segment就是一个子哈希表,所以对于同一个segment的操作才考虑线程同步,不同的segment不需要考虑。


collection、List、Set、Map接口的使用,包括如何定义、初始化、赋值、取值、修改删除。

Collection c = new ArrayList();

//List l = new ArrayList();

//Set s = new HashSet();

//Map m = new HashMap();

    String oldValue = "abc";
    String newValue = "123";
    //增加
    c.add(oldValue);
    Iterator it = c.iterator();
    while(it.hasNext()){
      //取值
      String str = (String)it.next();
      if(str.equals(oldValue)){
        //删除
        c.remove(oldValue);
        //修改
        c.add(newValue);
      }
    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我就是那个大头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值