文章目录
- 集合类概述
- List集合
- Set集合
- Map集合
前言
主要理解集合类的概念,和掌握其使用方法
1.集合类的概述
java.util 包中提供了一些集合类,这些集合类也叫容器。集合类类似于数组,只不过是存放对象的引用的,而且长度可变。
下图是集合类的继承关系:
可以看到图中有个Collection接口,他是层次结构中的根接口,通常不能直接使用,Set和List继承他的方法可以使用他的方法。
方法 | 功能描述 |
---|---|
add(E e) | 将对象添加到集合中 |
remove(Object o) | 将对象从集合中移除 |
isEmpty() | 判断集合是否为空 |
iterator() | 迭代器,用于遍历集合中的对象 |
size() | 还回集合中对象的个数int类型 |
例子:
package com.cn;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Dom {
public static void main(String[]args){
Collection<String> collection=new ArrayList<>();//实例化集合类对象
//添加数据
collection.add("a");
collection.add("a");
collection.add("a");
//创建迭代器
Iterator<String> iterator=collection.iterator();
//hasNext()是判断下一个是否为空,next()是还回下一个元素,类型为Object
while(iterator.hasNext()){
String str=(String) iterator.next();
System.out.println(str);
}
}
}
结果是:
a
a
a
2.List集合
注意:
- List接口继承了Collection接口,说以有Collection的所有方法,他还有两个重要方法为get,和set
- get(int index)就是后去index索引的元素
- set(int index,Object obj)就是index索引的元素用obj元素替代,index和obj都是变量。
- 上图中可以看到List接口下有两个常用的类分别是ArrayList和LinkedList
- 区别是ArrayList是采用可变数组方式,LinkedList是采用链表结构,前者方便查询,后者方便修改。
例子:
package com.cn;
import java.util.ArrayList;
import java.util.List;
public class Dom {
public static void main(String[]args){
List<String>list =new ArrayList<>();//创建集合类对象
//添加数据
list.add("a");
list.add("b");
list.add("c");
String str=(String) list.get(1);
list.set(1,"t");
String str1=(String) list.get(1);
System.out.println(str);
System.out.println(str1);
}
}
结果:
b
t
当然LinkedList与其相似。
3.Set集合
注意:
- Set集合中对象是无序的
- Set集合中不能出现重复对象
- Set集合也继承Collection接口,也用于他的方法
- Set接口实现类通常是HashSet和TreeSet
TreeSet还实现了java.util.SortedSet接口,所以下面是TreeSet的增加的方法:
方法 | 功能 |
---|---|
first() | 还回集合汇总第一个元素 |
last() | 还回集合中最后一个元素 |
comparator() | 还回对集合元素进行比较的比较器 |
headSet(E toElement) | 还回一个新的集合,集合里的对象是toElement(不包括)之前的所有对象 |
subSet(E fromElement,E fromElement) | 还回一个新的集合,集合里的对象是fromElement(不包括)和fromElement(包括)之间的所有对象 |
tailSet(E fromElement) | 还回一个新的集合,集合里的对象是fromElement(包括)之后的所有对象 |
例子:
package com.cn;
import java.util.Iterator;
import java.util.TreeSet;
/*使用treeSet进行排序的时候,需要注意的地方:
1、在使用treeSet进行排序的时候,如果数据不能排序会报cannot be cast to java.lang.Comparable
2、对于不能排序的数据,有两种方法可以实现排序:
3、对于排序的实体类实现java.lang.comparable接口重写compareTo方法
*/
public class Dom implements Comparable<Object>{
String name;
int id;
//重写方法
@Override
public int compareTo(Object o) {
Dom doma=(Dom) o;
int result=id>doma.id?1:(id==doma.id?0:-1);
return result;
}
public Dom(String name,int id){
this.id=id;
this.name=name;
}
public String getName(){
return this.name;
}
public int getId(){
return this.id;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public static void main(String[]args){
//实例化对象
Dom dom0=new Dom("小明",2200316);
Dom dom1=new Dom("小红",2200326);
Dom dom2=new Dom("小网",2200336);
Dom dom3=new Dom("小干",2200346);
//创建集合类并添加对象
TreeSet<Dom> treeSet=new TreeSet<>();
treeSet.add(dom0);
treeSet.add(dom1);
treeSet.add(dom2);
treeSet.add(dom3);
//c创建迭代器
Iterator iterator=treeSet.iterator();
while (iterator.hasNext()){
Dom dom=(Dom) iterator.next();
System.out.println(dom.getName()+" "+dom.getId());
}
System.out.println("截取的部分");
//截取dom2之前的所有对象不包括dom2,其他的方法类似
iterator=treeSet.headSet(dom2).iterator();
while (iterator.hasNext()){
Dom dom=(Dom) iterator.next();
System.out.println(dom.getName()+" "+dom.getId());
}
}
}
结果:
小明 2200316
小红 2200326
小网 2200336
小干 2200346
截取的部分
小明 2200316
小红 2200326
3.Map集合
注意:
- Map没有继承Collection接口
- Map提供key到value的映射
- Map不能包含相同的key,且一个key只能映射一个value
方法 | 功能 |
---|---|
put(K key,V value) | 向集合中添加key和value的映射关系 |
containsKey(Object key) | 如果此映射中有key的映射关系了,这还回true |
containValue(Object value) | 如果此映射将一个或者多个key映射到指定值,则还回true |
get(Object key) | 如果存在key对象这还回对象对应的值,否则还回null |
keySet() | 还回集合中的所有key对象,形成Set集合 |
values() | 还回集合中的所有value对象,形成Collection集合 |
例子:
package com.cn;
import java.util.*;
public class Dom{
public static void main(String[]args){
//创建Map实例
Map<String,String> map=new HashMap<>();
map.put("0022","小明");
map.put("0023","小红");
map.put("0024","小工");
//创建Set集合和Collection集合
Set<String> set=map.keySet();
Collection<String> collection=map.values();
//创建迭代器
Iterator<String> iterator1=set.iterator();
Iterator<String> iterator2=collection.iterator();
//遍历
System.out.println("key集合中的元素:");
while (iterator1.hasNext()){
System.out.println(iterator1.next());
}
System.out.println("value集合中元素:");
while (iterator2.hasNext()){
System.out.println(iterator2.next());
}
}
}
结果:
key集合中的元素:
0024
0022
0023
value集合中元素:
小工
小明
小红
总结
集合类就是通过不同的方式存储对象