Java集合体系

Java的集合体系结构

由于基本数据类型使用不方便,因此,常用的数据结构Java已经为我们封装好了对应的容器,放在java.util包下,主要分为两部分,一部分是Collection接口下的类,一部分是Map接口下的类。

Collection体系

Collection接口是Collection体系的顶级接口,其结构关系如下所示:

需要注意的是,其实Collection接口还实现了Iterable接口,也就是说Collection接口下的所有子类都可以通过迭代器进行遍历。

Collection接口下包含Set、Queue、List三大接口,分别对应集合、队列、列表,他们各自的特点以及我们常用的子类如下所示:

我们最常用的是ArrayList和HashSet,ArrayList本质是一个可变的Object数组,支持自动扩容等。HashSet是一个不可重复的集合,底层存储的其实是一个value为null的HashMap。

以上集合,只有Vector是线程安全的,其余均非线程安全的。Vector是通过在所有方法上加synchronize锁来保证安全性。

Map体系

Map是Java提供给我们的映射类型,主要结构如下所示:

我们常用的Map有HashMap和TreeMap

  • HashMap的key不可重复,可为null,线程不安全
  • TreeMap的key不可重复,不可为null,TreeMap实现了SortedMap接口,而SortedMap接口里定义了Comparator接口,泛型是Key的超类,因此可以实现根据Key的值进行排序。线程不安全

需要注意的是,除了这些之外,我们常用的容器还有一个线程安全的ConcurrentHashMap,只是它并没有被放在我们java.util包下,而是放在了JDK1.5提供的Java并发包JUC(java.util.current)包下

工具类

Java除了提供给我们这些容器之外,还提供了一些工具类给我们使用,比如collections、Arrays、Objects。他们也都在java.util包下。

Collections

Collections是针对集合类(Collection)的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

sort(List<T> list); 
// 对集合进行排序, 底层通过转换为数组进行排序, Arrays.sort通过ComparableTimSort.sort排序:需要实现Comparable接口。

shuffle(List<?> list, Random rnd); 
// 对集合进行随机排列。

reverse(List<?> list); 
// 反转集合中元素的顺序

binarySearch(List<? extends Comparable<? super T>> list, T key); 
// 通过二分检索查找指定集合中的元素, 返回索引位置

max(Collection<? extends T> coll, Comparator<? super T> comp); 
// 通过Comparator接口实现进行比较(大于0, 等于0 , 小于0), 获得最大值

min(Collection<? extends T> coll, Comparator<? super T> comp); 
// 通过Comparator接口实现进行比较(大于0, 等于0 , 小于0), 获得最小值

max(Collection<? extends T> coll); 
// 通过自然数进行比较, 获得最大值

min(Collection<? extends T> coll); 
// 通过自然数进行比较, 获得最小值

indexOfSubList(List<?> source, List<?> target); 
// 查找subList中首次出现位置的索引

lastIndexOfSubList(List<?> source, List<?> target); 
// 查找subList中最后出现的位置的索引

replaceAll(List<T> list, T oldVal, T newVal); 
// 替换集合中的某个元素, 如果该元素存在返回true

rotate(List<T> list, int distance); 
// 集合中的元素后移distance个位置, 后面遮盖住的位置移动到前面; 底层数量大于100个通过3次reverse实现, 通过排序算法实现

copy(List<? super T> dest, List<? extends T> src); 
// 将src中的元素全部复制到dest中, 并且覆盖索引;(src的存储大小必须小于dest)

swap(List<?> list, int i, int j); 

// 交换集合中指定索引位置的元素

fill(List<? super T> list, T obj); 
// obj替换集合中所有的元素

nCopies(int n, T o); 
// 返回大小为n的List集合, 其中所有的元素内容指向o

enumeration(final Collection<T> c); 
// 根据集合生成一个旧版枚举

list(Enumeration<T> e); 
// 旧版枚举生成ArrayList

synchronizedCollection(Collection<T> c)

//将容器转为线程安全的,底层通过加synchronize锁实现

Arrays

Arrays工具类包含操作数组(如搜索和排序等)的各种方法。其中此类还包含一个允许将数组作为列表来查看的静态工厂。

Arrays和Collections的方法大致相同,只是Collections面向封装好的容器,而Arrays面向基本数据类型,数组等。

常用的相关方法
public static String toString(int[] a);把数组转化成为一个字符串。
public static void sort(int[] a):对数组进行排序
public static int binarySearch(int[] a,int key):二分法查找(注意:二分法查找是针对排序好的数组才可以使用)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值