java 类 大全_JAVA集合类汇总

64c9da4dcfe3c38ecefb02a84072a000.png

408546e8a9f0e167b8ef82a3636c9e64.png

缩略图如下图所示:图中,实线边框的是实现类,折线边框的是抽象类,而点线边框的是接口

820c57ee264e943e8301c7e8a176928e.png

在JAVA的util包中有两个所有集合的父接口Collection和Map,它们的父子关系:

set --其中的值不允许重复,无序的数据结构

list   --其中的值允许重复,因为其为有序的数据结构

map--成对的数据结构,健值必须具有唯一性(键不能同,否则值替换)

│├ ArreyList     (Class 数组,随机访问,没有同步,线程不安全)

│├ Vector        (Class  数组                   同步        线程安全)

│├ LinkedList    (Class  链表   插入删除   没有同步   线程不安全底层是由链表实现的)

│└ Stack          (Class)

└+Set(接口 不能含重复的元素。仅接收一次并做内部排序,集)

│├ HashSet            (Class)

│├ LinkedHashSet   (Class)

│└ TreeSet       (Class)

+Map(接口)

├ +Map(接口 映射集合)

│ ├ HashMap            (Class 不同步,线程不安全。除了不同和允许使用null 键值之外,与Hashtable大致相同)

│ ├ Hashtable           (Class 同步   ,线程安全    。不允许实施null 键值)

│ ├ +SortedMap 接口

│ │   ├ TreeMap         (Class)

│ ├ WeakHashMap     (Class)

ArrayList , Vector , LinkedList 是 List 的实现类

Vector是线程安全的,效率肯定没有ArrayList高了。实际中一般也不怎么用Vector,可以自己做线程同步,也可以用Collections配合ArrayList实现线程同步。

前面多次提到扩容的代价很高,所以如果能确定容量的大致范围就可以在创建实例的时候指定,注意,这个仅限于ArrayList和Vector哟:

ArrayList arrayList = new ArrayList(100);

arrayList.ensureCapacity(200);

Vector vector = new Vector(100);

vector.ensureCapacity(200);

a.排序

List的排序的话就是使用Collections的sort方法,构造Comparator或者让List中的对象实现Comparaable都可以,这里就不贴代码了。

b.去重

第一种:用Iterator遍历,遍历出来的放到一个临时List中,放之前用contains判断一下。

第二种:利用set的不可重复性,只需三步走。

//第一步:用HashSet的特性去重

HashSet tempSet = new HashSet(arrayList);

//第二步:将arrayList清除

tempSet.clear();

//第三步:将去重后的重新赋给List

arrayList.addAll(tempSet);

Stack

Stack呢,是继承自Vector的,所以用法啊,线程安全什么的跟Vector都差不多,只是有几个地方需要注意:

第一:add()和push(),stack是将最后一个element作为栈顶的,所以这两个方法对stack而言是没什么区别的,但是,它们的返回值不一样,add()返回boolean,就是添加成功了没有;push()返回的是你添加的元素。为了可读性以及将它跟栈有一丢丢联系,推荐使用push。

第二:peek()和pop(),这两个方法都能得到栈顶元素,区别是peek()只是读取,对原栈没有什么影响;pop(),从字面上就能理解,出栈,所以原栈的栈顶元素就没了。

HashSet和TreeSet

Set集合类的特点就是可以去重,它们的内部实现都是基于Map的,用的是Map的key,所以知道为什么可以去重复了吧。

既然要去重,那么久需要比较,既然要比较,那么久需要了解怎么比较的,不然它将1等于2了,你怎么办?

比较是基于hascode()方法和equals()方法的,所以必要情况下需要重新这两个方法。

HashMap效率高于HashTable。

多线程环境下,通常也不是用HashTable,因为效率低。HashMap配合Collections工具类使用实现线程安全。同时还有ConcurrentHashMap可以选择,该类的线程安全是通过Lock的方式实现的,所以效率高于Hashtable。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值