目录
1.Java集合类简介
Java集合可用于存储数量不等的对象,并可以实现常用的数据结构(如栈、队列等待),还可以用于保存具有映射关系的关联数组。Java集合就是一种容器,可以把多个对象放进容器中,Java集合可以记住容器中的对象的数据类型,从而可以使代码更加简洁和健壮。
Java集合大致可以分为Set、List、Queue、Map四种体系。
Set:代表无序、不可重复
List:代表有序、重复的集合
Queue:代表一种队列集合实现
Map:代表具有映射关系的集合
Java集合与数组的区别:
数组的长度是不可变化的,在数组初始化时指定了数组长度,如果需求要动态添加数据,此时数据就无可为力了,而集合可以保存不确定数量的数据,同时也可以保存具有映射关系的数据。 同一个数组的元素即可是基本类型的值,也可以是对象(实际上保存的是对象的引用变量);而集合只能保存同一类型的对象。
Java集合体系之间的继承关系:
Java集合主要有两个接口派生而出:Collection和Map,这个两个接口是Java集合框架的根接口。
其中Collection的子类分别为Set , Queue , List , 而这三个子类也都是接口,必须要由其子类实现。
Map实现类是用于保存具有映射关系的数据。Map保存的每项数据都是键值对(key-value),Map中的key是不可重复的,key用于标识集合里的每项数据。
其中HashMap、TreeMap是经常用到的实现类
2.List接口
List接口可以存放任意的数据,而且在List接口中内容是可以重复的
List接口常用子类:
- ArrayList
- Vector
ArratList与Vector的常用操作:
add操作
get操作
indexOf操作
isEmpty操作
ArrayList实际代码演示如下:
import java.util.ArrayList;
import java.util.List;
public class ListDemo01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<String> K = new ArrayList<String>();
K.add("A");
K.add("B");
K.add("A");//List中的内容可以重复
for (int i = 0; i < K.size(); i++) {
System.out.println(K.get(i));
}
K.remove(0);//删除第一项
System.out.println("---------");
for (int i = 0; i < K.size(); i++) {
System.out.println(K.get(i));
}
System.out.println("集合是否为空:"+K.isEmpty());
//返回该对象在List中的下标
System.out.println("\"B\"是否存在:"+K.indexOf("B"));
}
}
运行结果为:
Vector实际代码演示如下:
import java.util.List;
import java.util.Vector;
public class ListDemo02 {
public static void main(String[] args) {
List<String> lists = new Vector<String>();
lists.add("A");
lists.add("B");
for (int i = 0; i < lists.size(); i++) {
System.out.println(lists.get(i));
}
}
}
运行结果为:
ArrayList与Vector的区别:
ArrayList | Vector | |
推出时间 | JDK1.2之后推出 | JDK1.0推出 |
性能 | 采用异步处理方式,性能高 | 采用同步处理方式,性能低 |
线程安全 | 属于非线程安全 | 属于线程安全 |
3.Set接口
Set接口中不能加入重复元素,但是可以通过子类进行排序
Set接口常用子类:
- HashSet ---- 散列存放
- TreeSet ---- 有序存放
HashSet与TreeSet的区别:
1、TreeSet 是二叉树实现的,Treeset中的数据是自动排好序的,不允许放入null值。
2、HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束。
HashSet实际代码演示:
import java.util.HashSet;
import java.util.Set;
public class ListDemo03 {
public static void main(String[] args) {
Set<String> set = new HashSet<String>();
set.add("E");
set.add("B");
set.add("A");
set.add("F");
set.add("D");
set.add("C");
System.out.println(set);
}
}
运行结果为:
TreeSet实际代码演示:
import java.util.Set;
import java.util.TreeSet;
public class ListDemo04 {
public static void main(String[] args) {
Set<String> set = new TreeSet<String>();
set.add("C");
set.add("E");
set.add("A");
set.add("G");
set.add("F");
set.add("D");
set.add("B");
System.out.println(set);
}
}
运行结果为:
4.Iterator接口
- 集合输出的标准做法: 使用Iterator接口
- 操作原理:
Iterator是专门的迭代器输出接口,迭代输出就是将元素一个个进行判断,判断其是否有内容,如果有内容则把内容取出,并进行下一轮判断;如果没有内容,则中断。
实际代码演示:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ListDemo05 {
public static void main(String[] args) {
List<String> lists = new ArrayList<String>();
lists.add("F");
lists.add("D");
lists.add("B");
lists.add("G");
Iterator<String> iter = lists.iterator();
while (iter.hasNext()) {
System.out.println(iter.next());
}
}
}
运行结果为:
5.Map接口
Map集合中存储的是键值对,键不能重复,值可以重复。根据键得到值,对map集合遍历时先得到键的set集合,对set集合进行遍历,得到相应的值。
常用子类:
- HashMap : 无序存放,Key不允许重复
- Hashtable : 无序存放,Key不允许重复
HashMap常用操作:
get操作
isEmpty操作
containsKey操作
HashMap实际代码演示:
import java.util.HashMap;
import java.util.Map;
public class MapDemo02 {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("key1", "12");
map.put("key2", "34");
map.put("key3", "56");
map.put("key4", "78");
map.put("key5", "90");
String str = map.get("key3");
System.out.println(str);
if (map.containsKey("key4")) {
System.out.println("Key4存在");
}else {
System.out.println("Key4不存在");
}
if (map.containsKey("key8")) {
System.out.println("Key8存在");
}else {
System.out.println("Key8不存在");
}
}
}
运行结果为:
HashMap的遍历操作:
keySet操作
values操作
实际代码演示:
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class MapDemo03 {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("key1", "12");
map.put("key2", "34");
map.put("key3", "56");
map.put("key4", "78");
map.put("key5", "90");
Set<String> s = map.keySet();//map.keySet()返回值是Set类型
Iterator<String> iterator = s.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
System.out.println("----------------");
Collection<String> collection = map.values();//map.values()返回值是collection类型
Iterator<String> iterator2 = collection.iterator();
while (iterator2.hasNext()) {
System.out.println(iterator2.next());
}
}
}
运行结果为: