浅谈java集合类型的相关操作
来源:互联网 发布:移动4g是什么网络 编辑:程序博客网 时间:2024/06/02 08:15
数据结构是大学计算机专业的一门很难的课程,相信很多计算机专业的学生都被诸如队列、链表、二叉树、霍夫曼算法等折磨过。但在java世界中对数据结构提供了现成的处理类,如Set、List、Map等,java程序员不必再纠缠数据结构的细节和复杂算法。以下就java集合类型的相关操作进行一些介绍和探讨。
一.集合内元素的顺序
在集合对象中List是有顺序的,但Map和Set没有顺序。如果我们在开发过程中,确实需要这两类集合进行排序,java也提供类相应的实现类。排序分为两种,一种是按照元素被添加的顺序进行排序,这类集合有LinkedHashSet和LinkedHashMap,这种很好理解;还有一种是通过开发排序算法实现排序,这一类有TreeSet和TreeMap。排序算法也有两种实现方式,一种是被插入集合的元素对象实现Comparable接口的compareTo方法,规则是如果a和b相等,则a.compareTo(b)返回0;如果a的顺序位于b前面,则返回负数,如果a位于b后,则返回正数.。另一种将一个Comparator对象传递给TreeSet类的构造器。Comparator接口声明了一个Compare方法,其逻辑与Comparable接口的compareTo方法一致。下面是一个例子,根据字符串降序排列:
class MyComparator implements Comparator{@Overridepublic int compare(Object o1, Object o2) {String s1 = (String)o1;String s2 = (String)o2;return s2.compareTo(s1);}}
优先级队列(Priority Queue)是一种能够在以任何顺序插入元素后,再按排序顺序读取这些元素的数据结构。实际上它并没有真的对内部所有元素进行排序,而只是当你调用add和remove方法是将最小元素移动到根,这样下次再调用remove方法时,返回当前队列中的最小元素。如果不想删除,只想查看当前根元素可以使用peek()方法。使用优先级队列的典型例子是任务调度。每个任务都有优先级,每当启动一个新任务时,总是优先级最高的任务被移出来执行。它的比较方式也是通过Comparable接口的compareTo方法。
三.数组转换为集合
Arrays类有一个静态的asList方法,可以将数组包装为List对象。
String[] s=new String[10];
List<String> list=Arrays.asList(s);
asList方法还有一个可变参数的重载,除可以传递数组外,还可以将各元素直接传给它。
List<String> names=Arrays.asList("张三","李四","王五");
四.子范围
如果你想List中取出第10到19个元素,可以通过subList方法,如:List list2=list1.subList(10,20); 20不包含在范围内,这与String的substring方法的情况一样。对于Set和Map类型根据其排序方式,可以使用subSet(from,to)、headSet(to)、tailSet(from)、subMap(from,to)、headMap(to)、tailMap(from)。
五.不可修改视图
如果你想使集合不可被修改,可以使用Collections的6种方法来获取该集合类的不可修改视图:unmodifiableCollection、unmodifiableList、unmodifiableSet、unmodifiableSortedSet、unmodifiableMap、unmodifiableSortedMap。
六.排序和查找
Collections类中的sort方法可对List进行排序,排序规则依然是通过Comparable接口的compareTo方法。Collections类还有一个算法是混排shuffle,它的作用正好与排序相反,它可以随机混排列表中各元素的顺序。
Collections类中的binarySearch方法实现了二分法查找,如果要查找某个元素,可以调用它。它的一个重载方法可以接受一个Comparator参数。
- 浅谈java集合类型的相关操作
- Java集合相关操作
- 集合的相关操作
- JAVA中的集合关系图和相关的操作
- LINQ相关的集合操作
- Map集合的相关操作
- Redis集合类型的操作
- 对Java日期类型的相关操作总结
- 四:redis的sets类型相关操作(有序和无序集合)
- HashTable的相关操作(HashTalbe浅谈)
- Java集合之Map类型的集合
- redis-java-api相关类型操作
- 理解JAVA的集合类型
- java 集合类型的clone
- 浅谈对java集合的理解
- Python集合(set)类型的操作
- Python集合(set)类型的操作
- Python集合(set)类型的操作
- highcharts之column3D
- HDU 2608 0 or 1(数论)
- 常见的操作系统使用的文件系统整理
- 基于虚拟机的centos版本linux操作系统如何联网
- Eclipse快捷键
- 浅谈java集合类型的相关操作
- 第16周项目2--用指针玩字符串(字符串的比较)
- 大数据处理之道 (MATLAB 篇)
- poj解题报告——1321
- highcharts 图表下钻drilldown
- Android -- Sharedpreferences
- C++primer(第二遍) 补第六章最后一题
- AllWinner board 笔记
- 基于adaboost的人脸检测方法