与肝胆人共事,无字句处读书
今天开始我们来学习一下Java基础知识中的另一个核心知识点,集合必须掌握。没有商量。
集合
1.定义:
java中的集合是指:长度可变,对象类型可以不一样的存储容器,
(重点:集合中是不可以存储基本的数据类型的)
//定义一个集合(正确示范)
List<Integer> list=new ArrayList<>();
list.add(1);
//错误示范
List<int> list=new ArrayList<>();
list.add(1);
对于刚接触java的人来讲,最需要了解的一点就是这个技术在工作中怎么用,也就是说:“工作中常用的集合有哪些,使用场景是什么样子的”
**接下来我们来看一张图:**了解一下集合的类结构
正式开始学习之前,给大家转变一下学习的思路
1:学习顶层,接口或是抽象类。
2:使用底层,子类或是实现类。
2.Collection集合(接口)
collection集合是所有单列集合的顶层接口,里面定义了所有单列集合共性的方法,任意的单列集合都可以使用collection集合的方法。,,具体有哪些方法呢?我们接着来看:
1.添加元素的方法add()
//定义一个集合,可以使用多态
public static void main(String[] args){
Collection<String> list=new ArrayList<>();
list.add("java");
}
2.清空集合 clear();
public static void main(String[] args){
Collection<String> list=new ArrayList<>();
list.clear();
}
3.删除集合中的元素 remove();
package list;
import java.util.ArrayList;
import java.util.Collection;
public class List {
public static void main(String[] args) {
// TODO Auto-generated method stub
Collection<String> coll=new ArrayList<>();
coll.add("java");
coll.remove("java");
System.out.println(coll);
}
}
4.集合的大小 Size();
package list;
import java.util.ArrayList;
import java.util.Collection;
public class List {
public static void main(String[] args) {
// TODO Auto-generated method stub
Collection<String> coll=new ArrayList<>();
coll.add("java");
System.out.println(coll.size());
}
}
5.集合转数组 toArray();
package list;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
public class List {
public static void main(String[] args) {
// TODO Auto-generated method stub
Collection<String> coll=new ArrayList<>();
coll.add("java");
coll.add("web");
coll.add("servlet");
coll.add("ajax");
String[] arr=new String[1];
String[] array = coll.toArray(arr);
System.out.println(Arrays.toString(array));
}
}
6.判断集合是否为空 isEmpty();
package list;
import java.util.ArrayList;
import java.util.Collection;
public class List {
public static void main(String[] args) {
// TODO Auto-generated method stub
Collection<String> coll=new ArrayList<>();
coll.add("java");
coll.add("web");
coll.add("servlet");
coll.add("ajax");
System.out.println(coll.isEmpty());
}
}
7.判断集合是否包含指定元素 .contains();
package list;
import java.util.ArrayList;
import java.util.Collection;
public class List {
public static void main(String[] args) {
// TODO Auto-generated method stub
Collection<String> coll=new ArrayList<>();
coll.add("java");
coll.add("web");
coll.add("servlet");
coll.add("ajax");
System.out.println(coll.contains("java"));
//结果为true
}
}
以上就是Collection集合中共性的一些方法,也是所有单列集合可以使用的方法
补充知识点: 迭代器-Iterator(所有单列集合的通用遍历方法)
3.迭代器(Iterator接口)
1.我们先来看一下Iterator的代码实现
package list;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class List {
public static void main(String[] args) {
// TODO Auto-generated method stub
Collection<String> coll=new ArrayList<>();
coll.add("java");
coll.add("web");
coll.add("servlet");
coll.add("ajax");
//注意:迭代器也是有泛型约束的,而且泛型类型随集合的泛型类型。
//hasNext,判断集合中是否存在下一个元素
//next,取出集合中的下一个元素
//iterator,集合中获取迭代器的方法
Iterator<String> iterator = coll.iterator();
while(iterator.hasNext()) {
String next = iterator.next();
System.out.println(next);
}
}
}
2.接下来我们来看一下迭代器的实现原理
先来看一幅图:
4.增强for循环
增强for循环也就是foreach循环,是JDK1.5之后出现的一个高级for循环,专门用来遍历数组或是集合(底层也是一个Iterator迭代器),简化了迭代器的使用
1.格式:for(集合/数组的数据类型 变量名:集合/数组名字){}
package list;
import java.util.Collection;
import java.util.HashSet;
public class List {
public static void main(String[] args) {
// TODO Auto-generated method stub
//所有的单列集合都可以使用foreach循环
Collection<String> coll=new HashSet<>();
coll.add("java");
coll.add("web");
coll.add("servlet");
coll.add("ajax8");
coll.add("ajax1");
coll.add("ajax2");
coll.add("ajax3");
coll.add("ajax4");
coll.add("ajax5");
coll.add("ajax6");
for(String str:coll) {
System.out.println(str);
}
}
}
5.集合中的泛型
泛型:是指集合中可以存储元素的类型
集合中使用泛型的好处:
1.可以避免数据类型转换的异常,存入的是什么类型,取出来就是什么类型
2.将运行时的异常提升到编译期
弊端:泛型是什么类型,就只能存储什么类型的数据·
泛型呢这里就不详细描述了(但是要去了解),接下来我们重要来学习一下,集合中的数据结构
6. 常见的数据结构:
数据存储常见的数据结构有:栈,数组,队列,链表和红黑树,我们分别来了解一下
6.1栈 (先进后出)
6.2队列 (先进先出)
6.3 数组
6.3 链表结构
1.单链表结构
2.双向链表
特点:
1.查询慢:
因为每一个节点的指针域是由上一个节点指定,所以每一次查询都需要从头开始
2.增删快:
节点的增加或是删除,并不影响链表的结构,只需要在节点多添加一个新的指针域即可。
3.有序:另一条链表专门负责记录节点顺序,
备注:双向循环链表的头节点只有指针域,不存放数据源
6.4红黑树
7. Collection下集合的数据结构
0.Vector集合的数据存储结构是可变数组结构
1.ArrayList集合的数据存储是数组结构
2.LinkedList集合的数据存储是双向链表结构
3.hashSet集合的数据存储结构是哈希表结构
4.LinkedHashSet集合是对HashSet集合的增强,是一个有序集合,数据存储结构式哈希表+单链表结构(做顺序的记录)
5.TreeSet集合的数据存储结构是哈希表结构
8. 哈希表结构
哈希表结构就是:数组+链表 或是 数组+红黑树