Java集合类
Java集合类
Java集合类包括两个根接口:Collection和Map。
一、Collection
包括Set、Queue、List。
1. List(接口)
List 接口继承了 Collection 接口,定义一个允许重复项的有序集合;按照对象进入顺序进行保存对象,List集合就像是一个数组,有序,长度可变
特点: 有序集合、有重复
操作 :add()、get()、set()、size()、remove()等
常用的实体类: ArrayList等
包括的实体类: ArrayList、Vector、Stack等
具体描述见下图:
2.Set(接口)
Set 接口继承了 Collection 接口,集合元素无序且无重复。
无重复原理:每个Set实现类依赖添加的对象的 equals() 方法来检查独一性,即任意两个元素e1和e2,都有e1.equals(e2)=false
特点: 无序集合、不可重复
操作 :add()、get()、set()、size()、remove()等
常用的实体类: HashSet、TreeSet等
包括的实体类: HashSet、TreeSet、EnumSet、LinkedHashSet等:
具体描述见下图:
3.Queue(接口)
特点: 队列(先进先出、有序表)
主要实现类有: PriorityQueue、ArrayDeque等
Collection主要实现类特点
二、Map:
Map接口含有两个部分(两列):关键字和值 (key-value,简称键值对);key不可重复,value可重复;添加数据时,如果key重复,则用新值替换原有的值。
操作: put(key,value)、remove()、clear()、size()、containsKey(Object key)、containsValue(Object value)
常用实现类: HashMap、TreeMap
具体描述见下图:
三、Collections工具类
Collections是针对集合的工具类,提供了排序、反转、求最值、二分查找等功能, 大大提高了开发人员工作效率。
Collections常用方法 | 说明 |
---|---|
sort(List< T> list) | 根据自然顺序(升序)对指定list集合排序 |
sort(List< T> list,Comparator< ? super T> c) | list-集合;c比较器:按指定比较器c为list排序 |
max(Collection< ? extends T> collection) | 根据自然顺序(升序)排序,返回collection的最大元素 |
min(Collection< ? extends T> collection) | 根据自然顺序(升序)排序,返回collection的最小元素 |
binarySearch(List<>list,T key) | list-集合,key-指定对象:对List二分查找key(必须先自然升序排序) |
reverse(List list) | 反转List元素的顺序 |
四、Arrays工具类
Arrays是针对数组的工具类,提供了排序,查找,二分查找等功能。
Arrays常用方法 | 说明 |
---|---|
sort(array) | 对指定的基本数据类型数组array按升序排列 |
equals(array1,array2) | 如果两个指定的基本数据类型数组相等返回true |
binarySearch(array,val) | 对基本数据类型数组array进行二分查找val |
toString(array) | 把基本数据类型数组array内容转换为字符串 |
五、集合排序问题
1.默认自然排序
Collections.sort(List list)可以实现元素的自然排序。
自然排序定义: { (x, y) | x.compareTo(y) <= 0 } 从小到大排序
2.自定义排序
自定义排序有两种方法:
- 使用Comparator接口
- 使用Comparable接口
(1)使用Comparator接口
- 先自定义一个比较器类实现 java.util.Comparator 接口
- 然后调用Collections.sort(List list, Comparator c) 完成自定义排序
class myComparator implements Comparator{
@Override
public int compare(Object o1, Object o2) { // 实现compare()方法
int x = (int) o1;
int y = (int) o2;
if( x > y )
return -1;
else
return 1;
}
}
public class Test {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(100);
list.add(50);
list.add(120);
Collections.sort( list, new myComparator() );
System.out.println( list ); // [120,100,50]
}
}
(2)使用Comparable接口
- 在定义对象类时实现比较接口 java.lang.Comparable,实现接口的 int compareTo(Object o) 比较方法 (1个参数)
- 然后调用 Collections.sort( List list ) 完成自定义排序
class Point implements Comparable {
int x; int y;
public Point() { }
public Point(int x, int y) { this.x = x; this.y = y; }
@Override
public String toString() {
return "[x = " + x + ", y = " + y + "]";
}
@Override
public int compareTo(Object o) { //实现compareTo()方法
Point p = (Point) o;
if ( this.x != p.x )
return this.x - p.x;
else
return this.y - p.y;
}
}
(3)Comparator与Comparable接口比较
- Comparator是在集合外部实现的排序,Comparable是在集合内部实现的排序;一个类实现了Camparable接口则表明该类对象之间是可相互比较的,该类对象组成的集合就可以直接使用Collections.sort()排序
- Comparator一种比较器,能将算法和数据分离,通过Comparator来实现排序而不必改变对象本身
- 可定义多种Comparator为同一个集合对象使用