一、集合类概述
集合类被称为容器,提到容器不难想到数组。
集合与数组:
1.数组的长度是固定的,集合的长度是可变的。(集合是动态数组)
2,数组来存放基本类型的数据,集合用来存放对象的引用。
常用的集合有List集合、Set集合和Map集合,其中List与Set继承了Collection接口。
二、Collection 接口
collection接口通常不能直接使用,List接口与set接口都继承了Collection接口,以此collection接口的方法List与Set也可以使用。
Collection接口常用方法
add(E e) 将指定的对象添加到该集合中
remove(Object o) 将指定的对象从该集合中移除
isEmpty() 返回boolean值,用于判断当前集合是否为空
iterator() 返回在此Collection的元素上进行迭代的迭代器。用于遍历集合中的对象
size() 返回int型,获取该集合中元素的个数。
Collection list =new ArrayList();//创建对象
//1.添加对象
list.add("hello");
list.add("word");
list.add("你好,世界");
//2.遍历集合中的对象
System.out.println("遍历对象");
Iterator it = list.iterator();//创建迭代器
while(it.hasNext()) {//判断是否有下一个元素
String str = (String)it.next();
System.out.println(str);
}
//3.判断集合是否为空和获取集合长度
System.out.println("集合是否为空:"+list.isEmpty()+"集合的长度为:"+list.size());
//4.删除指定对象
list.remove("word");
System.out.println("删除指定对象后,遍历对象");
Iterator its = list.iterator();//创建迭代器
while(its.hasNext()) {//判断是否有下一个元素
String str = (String)its.next();
System.out.println(str);
}
System.out.println("集合是否为空:"+list.isEmpty()+"集合的长度为:"+list.size());
三、List集合
1.List集合包括List接口以及List接口的所有实现类。List集合中的元素允许重复,各元素的顺序就是对象插入的元素。用户可以通过使用索引(元素在集合中的位置)来访问集合中的元素。
2.list接口包含了Collection接口的所有方法, 即:add、remove、iterator、isEmpty、size方法。
3.list中两个特有的方法
1.get(int index) 获得指定索引位置的元素
2.set(int index,Object obj) 将集合中指定索引的对象修改为指定的对象
4.List接口的常用实现类有ArrayList和LinkedList
语法:List
List
E可以为合法的Java数据类型。必须为类,如:String、Integer、Boolean、Byte、Character、Double、Number。
public static void main(String[] args) {
List list =new ArrayList<>();//创建集合对象
//添加元素
list.add(1);
list.add(2);
list.add(3);
//获取元素
int a = list.get(2);
System.out.println(a);//3
//设置元素
list.set(1, 4);
//遍历集合
Iterator c = list.iterator();
while(c.hasNext()) {
int b = (int) c.next();
System.out.println(b);//1 4 3
}
}
四、Set集合
1.Set集合中的对象不按特定的方式排序,简单把对象加入集合,但Set类不能有重复的对象。
2.Set接口常用的实现类有HashSet和TreeSet
Hashset不能保证Set的迭代顺序
TreeSet可通过比较来实现顺序的排序
3.Set接口继承了Collection接口,因此包含Collection接口所有方法。
4.1 TreeSet
Treeset类的新增方法:
1.first() 返回set类当前第一个元素
2.last() 返回Set中当前最后一个元素
3.comparator() 排序的比较器
- headSet(E toElement) 返回新的集合,在toElement(不包括)之前的对象
5.subSet(E fromElement, E fromElement) 返回新的集合,在fromElement(包括)和fromElement(不包括)之间的对象
6.tailSet(E fromElement) 返回新的集合,在fromElement(包括)之后的对象
存入TreeSet类实现的Set集合必须实现Comparable接口,接口中的compareTo()用于比较,
该对象小于、等于、大于指定对象,则返回负整数、0和正整数
语法:TreeSet tree = new TreeSet();
步骤:1.创建新的类
实现Comparable接口
重写compareTo方法
2.主方法
创建对象
将对象添加到集合中
//1.创建接口Comparable
public class teacher implements Comparable
4.2 HashSet 类
语法:Set xx =new HashSet();
public static void main(String[] args) {
//1.创建对象
teacher c1 =new teacher(11,23.0,"nn");
teacher c2 =new teacher(6,21.0,"nnd");
teacher c3 =new teacher(14,87.0,"nnf");
teacher c4 =new teacher(87,45.0,"ndn");
//2.建立hash并插入
Set set1 =new HashSet();
set1.add(c1);
set1.add(c2);
set1.add(c3);
set1.add(c4);
//3.遍历集合
Iterator it = set1.iterator();
while(it.hasNext()) {
teacher str = (teacher)it.next();
System.out.println(str);
}
}
五、Map集合
5.1 1.Map类没有Collection接口提供的方法,提供的是key到value的映射。Map中不能包含相同的key,每个key只能映射一个value。
2.常用的Map类方法:
put(K key,V value) 向集合内添加特定的key与value的映射关系
containsKey(Object key) 如果此映射包含指定key的映射关系,则返回true
containsValue(Object value) 如果此映射将一个或多个key映射到指定值,则返回true
get(Object key) 如果存在指定的key对象,则返回该对象对应的值,否则返回null
keySet() 返回该集合中的所有key对象形成的Set集合
values() 返回该集合中所有对象形成的Collection集合
1.Map接口的实现类有:HashMap和TreeMap
HashMap:基于哈希表的Map接口实现,允许使用null键和null值,必须保证键的唯一性。此类不保证映射的顺序,特别是它不保证该顺序持久不变。
TreeMap:集合关系中的映射关系具有一定的顺序,根据键对象按照一定的顺序排列的,不允许键的对象是null。(有序--->按照key来排序)
public static void main(String[] args) {
Map map= new HashMap();
//添加数据
map.put("01", "小王");
map.put("02","小刘");
map.put("03","xx");
//判断集合中是否包含相应的key和value
System.out.println("在此集合中是否包含05:"+map.containsKey("05")+"在此集合中是否包含xx:"+map.containsValue("xx"));//在此集合中是否包含05:false在此集合中是否包含xx:true
if(map.containsKey("01")) {
System.out.println(map.get("01"));//获取key所对应的value 小王
}
else {
System.out.println("不存在");
}
//将map赋值给set中(key对象)
Set set =map.keySet();
//遍历集合
Iterator it = set.iterator();
while(it.hasNext()) {
String str = (String)it.next();
System.out.println(str);
}
//将map赋值给collection中(值对象)
Collection a = map.values();
//遍历集合
Iterator it1 = a.iterator();
while(it1.hasNext()) {
String str= (String)it1.next();
System.out.println(str);
}
}
5.2 Map接口的实现类
public class teacher{
int age;
String name;
//创建toString方法
@Override
public String toString() {
return "teacher [age=" + age + ", name=" + name + "]";
}
//构造方法
public teacher(int age, String name) {
super();
this.age = age;
this.name = name;
}
}
public static void main(String[] args) {
//1.创建对象
teacher c1 = new teacher(22,"小是");
teacher c2 = new teacher(13,"小是");
teacher c3 = new teacher(20,"小为");
//2.创建HashMap(无序),并添加元素
Map map = new HashMap();
map.put(c1.age,c1.name);
map.put(c2.age,c2.name);
map.put(c3.age,c3.name);
//3.获取map对象中的key和value,并将它们遍历
Set set = map.keySet();
Iterator s = set.iterator();
while(s.hasNext()) {
int str = (int)s.next();
System.out.print(str+" ");
System.out.print(map.get(str)+" ");
}
}