阅读 131

JAVA集合类Collection浅析

JAVA集合类Collection浅析

编程之家收集整理的这篇文章主要介绍了JAVA集合类Collection浅析,编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


搜索热词

java.util.Collection是集合类的一个顶级接口,它提供了操作集合对象的通用接口方法,包含了集合的基本操作和属性,直接继承接口有ListSet

List

List接口及其实现类是容量可变的列表,可按索引访问集合中的元素。

特点:集合中的元素有序、可重复;

List接口一共有三个实现类,分别是ArrayList、LinkedListVector

1.ArrayList
ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。它和Vector本质上都可以看做是一个可以自动增长容量的数组,即当数组长度不够的时候,会定义一个更大的数组,并把之前的数组拷贝到新的数组里面,但是ArrayList和Vector的扩展数组的大小不同。

当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动,代价较高。因此,它适合随机查找和遍历,不适合插入和删除。

它提供的功能类似Vector类但是它不支持线程的同步。

ArrayList操作

添加:

List list = new ArrayList();  // 在列表的尾部追加元素  list.add("咩");  // 在列表的头部追加元素  list.add(0,"咩");  // 追加指定 collection 中的所有元素到列表结尾  list.addAll(new ArrayList());

查询:

// 返回列表中指定位置的元素  list.get(0); // 返回列表中的元素数  list.size();  // 返回列表中索引为0到2的元素list.subList(0,2);  // 将list直接转为Object[] 数组后返回list.toArray();  // 将list转化为需要类型的数组list.toArray(T[] a); // 返回列表的哈希值,hascode实际上是返回的对象存储的物理地址list.hashCode();  // 返回列表中首次出现指定元素的索引(不包含此元素,则返回-1)list.indexOf("咩");  // 返回列表中最后出现指定元素的索引(不包含此元素,则返回-1) list.lastIndexOf("咩");// 如果列表包含指定的元素,则返回true  list.contains("咩");// 如果列表包含指定collection的所有元素,则返回true  list.containsAll(new ArrayList());  // 比较指定的对象与列表是否相等  list.equals(new ArrayList());  // 如果列表不包含元素,则返回 true  list.isEmpty();

更新:

// 移除列表中的所有元素  list.clear();  // 移除列表中指定索引的元素  list.remove(0);  // 移除列表中出现的首个指定元素  list.remove("咩");  // 从列表中移除指定 collection 中包含的所有元素  list.removeAll(new ArrayList());  // 用指定元素替换列表中指定位置的元素  list.set(0,"咩");

遍历:

List list = new ArrayList();list.add("咩");list.add("喵");//对列表进行遍历操作Iterator<String> item = list.iterator();  while (item.hasNext()) {      String str = item.next();      System.out.println(str);  }

2.LinkedList
LinkedList是用链表结构存储数据的,适合数据元素的动态插入和删除,随机访问和遍历速度比较慢。它提供了List接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。

LinkedList操作

List linkList = new LinkedList();list.add("咩");list.add("喵");//对列表进行遍历操作ListIterator linkItem = linkList.listIterator();  // 判断迭代器中是否有下一个元素  while (linkItem.hasNext()) {      String str = linkItem.next();      System.out.println(str);}

3.Vector
Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性。

Vector在内存不够时默认是扩展1倍,ArrayList默认是扩展50% + 1个。
Vector提供indexOf(obj,start)接口,ArrayList没有。
Vector属于线程安全级别的,但是大多数情况下不使用Vector,因为线程安全需要更大的系统开销。

Set

Set是一个不允许有重复元素的集合。

Set的实现类有HastSetTreeSet。HashSet依赖于HashMap,实际上通过HashMap实现,是无序的;TreeSet依赖于TreeMap,实际上通过TreeMap实现,是有序的。

特点:集合中的元素不按特定方式排序,只是简单的把对象加入集合中。对Set中成员的访问和操作是通过Set中对象的引用进行的,所以集合中不能有重复对象。

1.HastSet
Set集合中元素都必须是唯一的,HashSet作为其子类也需保证元素的唯一性。

元素唯一性是通过元素的hashCode和equals方法来判断的:
1) 如果对象的hashCode值不同,那么不用调用equals方法就会将对象直接存储到集合中;
2) 如果对象的hashCode值相同,那么需调用equals方法判断返回值是否为true。若为true, 则视为相同元素,不会存储。若为false,则视为不同元素,会直接存储。

如果要使用HashSet存储元素,该元素的类必须覆盖hashCode方法和equals方法。

HashSet主要方法

add(Object) //添加元素addAll(Collection) //添加collection中的所有元素remove(object) //移除元素removeAll(Collection) //移除collection中的所有元素size() //返回所有元素的个数iterator() //遍历toArray() //转换为数组clear() //清空isEmpty() //判断是否为空contain(object) //判断是否包含元素containAll(Collection) //判断是否包含collection中的所有元素

2.TreeSet
TreeSet是一个有序集合,可以按照任何顺序将元素插入该集合,当对该集合进行迭代时,各个值将自动以排序后的顺序出现。TreeSet中的元素按照升序排列,缺省是按照自然顺序进行排序,意味着TreeSet中的元素要实现Comparable接口,或者有一个自定义的比较器Comparator。

TreeSet与HashSet的区别在于,TreeSet会自动按自然排序法给元素排序,即1排在2前,a排在b前,但是HashSet是根据元素的hashCode自动给元素排序的.如果我们不需要使用排序功能,应该使用HashSet,因为其性能优于TreeSet。

总结

以上是编程之家为你收集整理的JAVA集合类Collection浅析全部内容,希望文章能够帮你解决JAVA集合类Collection浅析所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。


本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐