Java集合,Collection,常见数据结构,list集合,泛型
一.集合的体系特点
数组的特点
-
数组定义完成并启动后,类型确定、长度固定。
-
不适合元素的个数和类型不确定的业务场景,更不适合做需要增删数据操作。
-
数组的功能也比较的单一,处理数据的能力并不是很强大。
集合的特点
-
集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。集合更像气球。
-
集合非常适合元素个数不能确定,且需要做元素的增删操作的场景。
-
同时,集合提供的种类特别的丰富,功能也是非常强大的,开发中集合用的更多。
集合类体系结构
-
Collection单列集合,每个元素(数据)只包含一个值。
-
Map双列集合,每个元素包含两个值(键值对)。
Collection集合特点
List系列集合:添加的元素是有序、可重复、有索引。
- ArrayList、LinekdList :有序、可重复、有索引。
Set系列集合:添加的元素是无序、不重复、无索引。
-
HashSet: 无序、不重复、无索引;LinkedHashSet: 有序、不重复、无索引。
-
TreeSet:**按照大小默认升序排序、**不重复、无索引。
泛型
- 集合都是泛型的形式,可以在编译阶段约束集合只能操作某种数据类型
Collection lists = new ArrayList();
Collection lists = new ArrayList<>(); // JDK 1.7开始后面的泛型类型申明可以省略不写
注意:集合和泛型都只能支持引用数据类型,不支持基本数据类型,所以集合中存储的元素都认为是对象。
// 存储基本类型使用包装类
Collection lists = new ArrayList<>();
Collection lists = new ArrayList<>();
二.Collection集合的常用API
- Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的。
1.Collection API如下:
方法名称 | 说明 |
---|---|
public boolean add(E e) | 把给定的对象添加到当前集合中 |
public void clear() | 清空集合中所有的元素 |
public boolean remove(E e) | 把给定的对象在当前集合中删除 |
public boolean contains(Object obj) | 判断当前集合中是否包含给定的对象 |
public boolean isEmpty() | 判断当前集合是否为空 |
public int size() | 返回集合中元素的个数。 |
public Object[] toArray() | 把集合中的元素,存储到数组中 |
2.实际运用:
public class CollectionAPIDemo {
public static void main(String[] args) {
Collection<String> c = new ArrayList<>();
//1.添加元素,添加成功返回true
c.add("Java");
c.add("HTML");
c.add("HTML");
c.add("MySQL");
c.add("Java");
c.add("张飞");
c.add("Java");
System.out.println(c);
//2.清空集合的元素
// c.clear();
// System.out.println(c);
//3.判断集合是否为空,是空返回true,反之
System.out.println(c.isEmpty());
//4.获取集合的大小
System.out.println(c.size());
//5.判断集合中是否包含某个元素
System.out.println(c.contains("Java")); // true
System.out.println(c.contains("诸葛亮"));// false
System.out.println(c.contains("MySQL"));// true
//6.删除某个元素:如果有更多个重复元素默认删除前面的第一个!
System.out.println(c.remove("java"));//false
System.out.println(c);
System.out.println(c.remove("Java"));//true
System.out.println(c);
//7.把集合转换成数组 [HTML, HTML, MySQL, Java, 张飞, Java]
Object[] arrs = c.toArray();
System.out.println("数组:" + Arrays.toString(arrs));
System.out.println("=================================");
Collection<String> c1 = new ArrayList<>();
c1.add("java1");
c1.add("java2");
Collection<String> c2 = new ArrayList<>();
c2.add("关羽");
c2.add("张飞");
//addAll把c2集合的元素全部放入c1中去
c1.addAll(c2);
System.out.println(c1);
System.out.println(c2);
}
}
三.Collection集合的遍历方式
1.方式一:迭代器,Iterator
迭代器遍历概述
-
遍历就是一个一个的把容器中的元素访问一遍。
-
迭代器在Java中的代表是Iterator,迭代器是集合的专用的遍历方式。
Collection集合获取迭代器
方法名称 | 说明 |
---|---|
Iterator iterator() | 返回集合中的迭代器对象,该迭代器对象默认指向当前集合的0索引 |
Iterator中的常用方法
方法名称 | 说明 |
---|---|
boolean hasNext() | 询问当前位置是否有元素存在,存在返回true ,不存在返回false |
E next() | 获取当前位置的元素,并同时将迭代器对象移向下一个位置,注意防止取出越界。 |
public class CollectionDemo1 {
public static void main(String[] args) {
Collection<String> lists = new ArrayList<>();
lists.add("刘备");
lists.add("关羽");
lists.add("张飞");
lists.add("卧龙");
System.out.println(lists);
//1.得到当前集合的迭代器对象
Iterator<String> it = lists.iterator();
//2.定义while循环
while (it.hasNext()){
String ele = it.next();
System.out.println(ele);
}
}
}
迭代器如果取元素越界会出现NoSuchElementException异常。
2.方式二:foreach/增强for循环
增强for循环
for(元素数据类型 变量名 : 数组或者Collection集合) {
//在此处使用变量即可,该变量就是元素}
- 增强for循环:既可以遍历集合也可以遍历数组
例子:
Collection list = new ArrayList<>();
…
for(String ele : list) {
System.out.println(ele);
}
public