目录
一、集合概述
首先,了解什么是集合?一般来说,我们的Java程序需要根据程序运行时才知道创建了多少个对象,非运行状态时,我们根本不知道要创建多少个对象。为了满足这些常规的编程需要,我们要求能在任何时候都能创建任意数量的对象,而这些对象用什么来存储呢?没错,就是集合。
Java集合类存放在java.util包中,是一个用来存放对象的容器。
常规来看,大概就下图所展示的一个结构。
其中蓝色的为实现类,红色的为接口类。
二、Collection
Collection讲解
Collection接口是Java集合类的顶级接口之一。其常用方法有以下这些:
代码讲解:
public class Test {
public static void main(String[] args) {
Collection collection = new ArrayList();
for (int i = 0; i < 5 ; i++) {
// 循环添加元素
collection.add(i);
}
System.out.println(collection);
// remove() 移除指定元素
collection.remove(2);
System.out.println(collection);
// contains() 判断是否存在指定元素
System.out.println(collection.contains(5));
// size() 获取集合元素个数
System.out.println(collection.size());
// clear() 清空元素
collection.clear();
// isEmpty()
System.out.println(collection.isEmpty());
}
}
运行结果:
Iterator迭代器
集合专用
常用方法:
Iterator<E> iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到
E next()返回迭代中的下一个元素
boolean hasNext()如果迭代具有更多元素,则返回true
代码实现:
public class Test {
public static void main(String[] args) {
Collection collection = new ArrayList();
for (int i = 0; i < 5 ; i++) {
collection.add(i);
}
Iterator iterator = collection.iterator();
while (iterator.hasNext()){
System.out.print(iterator.next() + " ");
}
}
}
运行结果:
List用法
List集合也是一个接口,它继承了Collection接口。
List集合的特点:
A、有序集合(也称序列)用户可以精确控制列表的每一个元素的位置插入,用户可以通过整数索· 引访问元素,并搜索列表中的元素
B、与set集合不同,列表通常允许重复的元素。
List的常用方法:
代码实现:
public class Test {
public static void main(String[] args) {
List list = new ArrayList();
for (int i = 0; i < 5 ; i++) {
// 循环添加元素
list.add(i);
}
serch(list);
// 在指定位置添加元素
list.add(2,15);
serch(list);
// 移除指定索引元素
list.remove(3);
serch(list);
// 根据索引修改值
list.set(1,10);
serch(list);
// 获取索引元素
System.out.println(list.get(3));
}
public static void serch(List list){
for (int i = 0; i < list.size() ; i++) {
System.out.print(list.get(i) + " ");
}
System.out.println();
}
}
运行结果:
ListIterator列表迭代器
(List专用),可向任一方向迭代。
常用方法:
代码实现:
public class Test {
public static void main(String[] args) {
List list = new ArrayList();
for (int i = 0; i < 5 ; i++) {
// 循环添加元素
list.add(i);
}
// ListIterator 遍历
ListIterator listIterator = list.listIterator();
while (listIterator.hasNext()){
System.out.print(listIterator.next() + " ");
}
System.out.println();
// 倒序遍历
while (listIterator.hasPrevious()){
System.out.print(listIterator.previous() + " ");
}
}
}
List集合的常用实现类:
ArrayList
ArrayList:底层数据结构是数组,查询快,增删慢
LinkedList
LinkedList:底层数据结构是链表,查询慢,增删快
Set用法
Set也是一个接口,它和List一样继承了Collection接口,但不一样的是,它的元素无序,即不能依靠索引值进行访问元素,所以要用forEach进行遍历;并且Set与List的区别还有元素的不可重复性,在Set中每个元素都是唯一的。
哈希值概念
常用的实现类
HashSet
特点:
(1)底层数据结构是哈希表
(2)元素无序,不可以索引访问
(3)元素不可重复
TreeSet
特点:
(1)与HashSet不一样,元素是有序的,但还是没有带索引的方法。
TreeSet(), 根据其元素的自然顺序进行排序
TreeSet(Comparator<? super E> comparator) :根据指定的比较器进行排序
(2)元素不可重复
TreeSet的排序实现:
public class Test1 {
public static void main(String[] args) {
// 自然排序
TreeSet<Integer> set = new TreeSet<Integer>(){{
add(5);
add(6);
add(1);
add(2);
}};
for (Integer i : set){
System.out.print(i + " ");
}
System.out.println();
// 比较器排序
TreeSet<Integer> set1 = new TreeSet<Integer>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
}){{
add(5);
add(6);
add(1);
add(2);
}};
for (Integer i : set1){
System.out.print(i + " ");
}
}
}
运行结果:
三、Map
Map讲解
Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。
Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。但键是具有唯一性的。
常用方法:
Map的遍历
public class Test {
public static void main(String[] args) {
Map<String,Integer> map = new HashMap<String, Integer>(){{
put("张三",22);
put("李四",20);
put("王五",21);
}};
/*
第一种遍历方法
1、通过keySet()方法返回一个键的集合
2、遍历这个集合,依次用get()方法获取值
*/
Set<String> set = map.keySet();
for (String s : set){
System.out.println(s + " " + map.get(s));
}
System.out.println("-----------");
/*
第二种遍历方法
1、通过entrySet()方法获取一个键值对对象
2、用getKey()和geyValue()方法分别获取值和键
*/
for (Map.Entry<String,Integer> entry : map.entrySet()){
System.out.println(entry.getKey() + " " + entry.getValue());
}
}
}
四、Collections工具
Collections是一个针对集合进行操作的工具类,提供的常用方法有:
public class Test1 {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>(){{
add(2);
add(5);
add(1);
add(7);
add(3);
}};
for (Integer i : list) System.out.print(i + " ");
System.out.println();
// sort 排序
Collections.sort(list);
for (Integer i : list) System.out.print(i + " ");
System.out.println();
// reverse 反转
Collections.reverse(list);
for (Integer i : list) System.out.print(i + " ");
System.out.println();
// shuffle 随机排列
Collections.shuffle(list);
for (Integer i : list) System.out.print(i + " ");
}
}
运行结果:
这次的分享就暂时到这里,如有错误的地方请多多支出,谢谢您的阅读。