集合概述
Collection接口
Collection是所有单列集合的父接口,因此在Collection中定义了单列集合(List和Set)通过的一些方法,这些方法可用于操作所有的单列集合。
Collection接口的方法
方法声明 | 功能描述 |
boolean add (Object o) | 向集合中添加一个元素。 |
boolean addAll (Collection c) | 将指定Collection中的所有元素添加到该集合中。 |
void clear () | 删除该集合中的所有元素 |
boolean remove (Object 0) | 删除该集合中指定的元素 |
boolean removeAll (Collection c) | 删除指定集合中的所有元素 |
boolean isEmpty () | 判断该集合是否为空。 |
boolean contains (Object o) | 断该集合中是否包含某个元素。 |
boolean containsAll (Collection c) | 判断该集合中是否包含指定集合中的所有元素 |
Iterator iterator () | 返回在该集合的元素上进行迭代的迭代器(Iterator),用于遍历该集合所有元素。 |
int size () | 获取该集合元素个数。 |
List接口
Set接口
Set接口简介 | Set接口和List接口一样,同样继承自Collection接口,它与Collection接口中的方法基本一致,并没有对Collection接口进行功能上的扩充,只是比Collection接口更加严格了. 与List接口不同的是,Set接口中元素无序,并且都会以某种规则保证存入的元素不出现重复. | ||||||||
HashSet集合 | HashSet是Set接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的,当向HashSet集合中添加一个对象时,首先会调用该对象的hashCode()方法来确定元素的存储位置,然后再调用对象的equals()方法来确保该位置没有重复元素.Set集合与List集合存取元素的方式都一样. 案例:
注意:HashSet集合之所以能确保不出现重复的元素,是因为它在存入元素时做了很多工作。当调用HashSet集合的add()方法存入元素时,首先调用当前存入对象的hashCode()方法获得对象的哈希值,然后根据对象的哈希值计算出一个存储位置。如果该位置上没有元素,则直接将元素存入,如果该位置上有元素存在,则会调用equals()方法让当前存入的元素依次和该位置上的元素进行比较,如果返回的结果为false就将该元素存入集合,返回的结果为true则说明有重复元素,就将该元素舍弃,整个存储的流程如下:
案例:将对象存入HashSet
注意:向HashSet集合存入三个Student对象,出现重复元素,这样的学生信息应该不允许出现在HashSet集合中。之所有没有去掉,是因为在定义Student类时没有重写hashCode()和equals()方法。 案例:修改上例代码
| ||||||||
TreeSet集合 |
| ||||||||
|
|
Map接口
JDK5.0新特性——泛型
Collections工具类
针对集合的操作非常频繁,例如将集合中的元素排序、从集合中查找某个元素等。针对这些常见操作,JDK提供了一个工具类专门用来操作集合,这个类就是Collections,它位于java.util包中。Collections类中提供了大量的方法用于对集合中的元素进行排序、查找和修改等操作。
排序操作
Collections类中提供了一系列方法用于对List集合进行排序。
方法声明 | 功能描述 |
static <T>boolean addAll( Collection <? super T> c, T…. elemnts) | 将所有指定元素添加到指定的collection中 |
static void reverse (List list) | 反转指定List集合中元素的顺序 |
static void shuffle (List list) | 对List集合中的元素进行随机排序(模拟玩扑克中的“洗牌“) |
static void sort (List list) | 根据元素的自然顺序对List集合中的元素进行排序。 |
static void swap (List list, int I, int j) | 将指定List集合中i处元素和j处元素进行交换。 |
案例:
public static void main(String[] args) { ArrayList list = new ArrayList<Object>(); Collections.addAll(list, "C", "Z", "B", "K"); System.out.println("排序前:"+list); Collections.reverse(list); System.out.println("反转后:"+list); Collections.sort(list); System.out.println("按自然顺序排序后:"+list); Collections.shuffle(list); System.out.println("洗牌后:"+list); } |
|
查找、替换操作
Collections类还提供了一些常用方法用于查找、替换集合中的元素。
方法声明 | 功能描述 |
static int binarySearch (List list, Object key) | 使用二分法搜索指定对象在List集合中的索引,查找List集合中的元素必须是有序的。 |
static Object max (Collection col) | 根据元素的自然顺序,返回给定集合中最大的元素。 |
static Object min (Collection col) | 根据元素的自然顺序,返回给定集合中最小的元素。 |
static boolean replaceAll (List list, Object oldVal, Object newVal) | 用一个新的newVal替换List集合中所有的旧值oldVal。 |
案例:
public static void main(String[] args) { ArrayList list = new ArrayList<Object>(); Collections.addAll(list, -3, 2, 9, 5, 8); System.out.println("集合中的元素:"+list); System.out.println("集合中的最大元素:"+Collections.max(list)); System.out.println("集合中的最小元素:"+Collections.min(list)); //将集合中的8用0替换掉 Collections.replaceAll(list, 8, 0); System.out.println("替换后:"+list); } |
|
Arrays工具类
java.util包中提供了一个专门用于操作数组的工具类——Arrays。Arrays工具类提供了大量的静态方法。
使用Arrays的sort()方法排序。
案例:
public static void main(String[] args) { int[] arr = {9, 8, 3, 5, 2}; System.out.print("排序前: "); printArray(arr); Arrays.sort(arr); System.out.print("排序后:"); printArray(arr); }
private static void printArray(int[] arr) { System.out.print("["); for (int x=0; x<arr.length; x++) { if (x != arr.length-1){ System.out.print(arr[x]+","); }else{ System.out.println(arr[x]+"]"); } } } |
|
使用Arrays的binarySearch(Object[]a, Object key)方法查找元素
案例:在数组中查找某些特定的元素。
public static void main(String[] args) { int[] arr = {9, 8, 3, 5, 2}; System.out.print("排序前: "); Arrays.sort(arr); int index = Arrays.binarySearch(arr, 3); System.out.print("数据的排序后元素3的索引是:"+index); } |
|
使用Arrays的copyOfRange (int[]original, int from, int to)方法拷贝元素
案例:拷贝数组
public static void main(String[] args) { int[] arr = {9, 8, 3, 5, 2}; int[] copyOfRange = Arrays.copyOfRange(arr, 1, 7); for (int i = 0; i < copyOfRange.length; i++) { System.out.print(copyOfRange[i]+" "); } } |
|
使用Arrays的fill(Object a, Objectval)方法填充元素
案例:填充元素
public static void main(String[] args) { int[] arr = {9, 8, 3, 5, 2}; //用8替换数组中的每一个值 Arrays.fill(arr, 8); for (int i = 0; i < arr.length; i++) { System.out.println(i+":"+arr[i]); } } |
|
使用Arrays的toString(int[] arr)方法把数组转换为字符串
案例:将数组转换为字符串
public static void main(String[] args) { int[] arr = {9, 8, 3, 5, 2}; //使用toString()方法将数组转换为字符串 String arrString = Arrays.toString(arr); System.out.println(arrString); } |
|