首先,我们要明白什么是集合,集合的定义是什么:
集合,又称作容器,提到容器,我们不难想到数组,集合与数组不同的是
常见的集合一共有三类
public class fan{
public static void main(String[] args) {
List list=new ArrayList();//创建一个List集合,定义为String类型
for (int i = 0; i < 5; i++) {//for循环为list增加元素
String list1="编号"+i;
list.add(list1);
}
System.out.println("list集合的内容是否为空:"+list.isEmpty());//调用isEmpty()方法判断集合是否为空
list.remove("编号2");//移除元素“编号2”
list.remove(3);//移除索引号为3的元素
list.set(0, "liqifeng");//将指定索引位置的对象修改为制定的对象
Iterator it=list.iterator();//通过list对象创建一个迭代器
while (it.hasNext()) {//遍历输出集合内容
String string = (String) it.next();
System.out.println(string);
}
for (int i = 0; i < list.size(); i++) {//不创建迭代器,直接使用for也可以遍历集合内容
System.out.println(list.get(i));//调用get(index i)来输出
}
}
}
输出内容
list集合的内容是否为空:false
liqifeng
编号1
编号3
liqifeng
编号1
编号3
上述代码我们需要注意的是list.get()方法不是collection接口的方法
而且remove()方法的参数可以为索引号,也可以是具体的对象
我们的List接口还提供了set(int index,Object obj)方法,就是将指定索引位置的对象修改为指定的对象。
接下来我们来看一下Set
我们讲HashSet实现了Set接口,而TreeSet除了实现Set接口外,还实现了java.util.SortedSet接口,所以TreeSet在遍历集合的时候按照自然顺序递增排序,也可以通过比较器排序。接下来我们来看一下TreeSet新增的方法
public class fan{
public static void main(String[] args) {
TreeSet tree=new TreeSet();//创建String类型的TreeSet集合
tree.add("liqifeng");//添加元素
tree.add("wuyachen");
tree.add("lizafeng");
System.out.print("tree的第一个元素:");
System.out.println(tree.first());
System.out.print("tree的最后一个元素:");
System.out.println(tree.last());
System.out.println("创建迭代器遍历集合");
Iterator it =tree.iterator();
while(it.hasNext()){//遍历集合的方法
String string =it.next();
System.out.println(string);
}
System.out.println("取出wuyachen之前的对象元素");
it=tree.headSet("wuyachen").iterator();
while(it.hasNext()){
String string =it.next();
System.out.println(string);
}
}
}
tree的第一个元素:liqifeng
tree的最后一个元素:wuyachen
创建迭代器遍历集合
liqifeng
lizafeng
wuyachen
取出wuyachen之前的对象元素
liqifeng
lizafeng
以上代码为我们展示了TreeSet中新增的方法,需要注意的是,TreeSet中不管添加元素的顺序是什么,但是一旦添加进去,TreeSet内的元素就会自动按照自然排序排好。就按照上述代码中遍历集合的输出结果来看,我们集合添加的顺序是
tree.add(“liqifeng”);
tree.add(“wuyachen”);
tree.add(“lizafeng”);
但是输出的时候却变成了自然排序的
liqifeng
lizafeng
wuyachen
好的,接下来我们来看Map
Map集合没有继承colletion接口,其提供的是key到value的映射。Map中不能包含相同的key,每个key只能映射一个value。Map集合包括Map接口以及Map接口的所有实现类。
我们来看一下Map集合的常用方法:
valuses():返回该集合中所有的值对象形成的collection集合
上述方法具体怎么使用呢,看代码
public class map {
public static void main(String[] args) {
Map map=new HashMap();//创建Map对象
map.put("liqifeng", "001");
map.put("lidaeng", "002");//添加映射
map.put("wuyachen", "003");
System.out.println("map中是否liqifeng映射的值:"+map.containsKey("liqifeng"));
System.out.println("map中是否存在指定映射的值002:"+map.containsValue("002"));
Set set=map.keySet();//调用方法返回Set集合
Iterator it=set.iterator();//创建迭代器
System.out.println("使用ketSet方法返回Set集合并且遍历输出");
while(it.hasNext()){
String string=(String)it.next();
System.out.println(string);
}
Collection coll=map.values();//使用values方法返回Collcetion集合
it=coll.iterator();//创建迭代器
System.out.println("使用values方法返回Collcetion集合并且遍历输出");
while (it.hasNext()) {
String string = (String) it.next();
System.out.println(string);
}
}
}
上述代码的输出结果是
map中是否liqifeng映射的值:true
map中是否存在指定映射的值002:true
使用ketSet方法返回Set集合并且遍历输出
wuyachen
liqifeng
lidaeng
使用values方法返回Collcetion集合并且遍历输出
003
001
002
接下来我们来讲一下Map接口的实现类:HashMap和TreeMap
HashMap通过hashcode对其内容进行快速查找,而 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。
HashMap:适用于在Map中插入、删除和定位元素。
Treemap:适用于按自然顺序或自定义顺序遍历键(key)。
HashMap通常比TreeMap快一点(树和哈希表的数据结构使然),建议多使用HashMap,在需要排序的Map时候才用TreeMap。
我们通过一段代码来看
public class Map1 {
public static void main(String[] args) {
Map<String, String> map=new HashMap<String, String>();//创建HashMap集合
Test test1=new Test("001", "李奇峰");
Test test2=new Test("005", "李大峰");//创建对象
Test test3=new Test("002", "吴娅晨");
map.put(test1.getId(), test1.getName());
map.put(test2.getId(), test2.getName());//将对象添加到集合中去
map.put(test3.getId(), test3.getName());
Set<String> set=map.keySet();//获取Map集合的key的对象集合
Iterator<String> it=set.iterator();//创建迭代器
while (it.hasNext()) {
String integer = (String) it.next();
String name=map.get(integer); //遍历HashMap集合
System.out.println(integer+"-"+name);
}
TreeMap<String, String> map2=new TreeMap<String, String>();//创建TreeMap集合对象
map2.putAll(map);向集合添加对象
Set<String> set1=map2.keySet();//获取Map集合的key的对象集合
Iterator<String> it1=set1.iterator();
while (it1.hasNext()) {
String integer = (String) it1.next();
String name=map2.get(integer); //遍历TreeMap集合
System.out.println(integer+"-"+name);
}
}
}
这是输出的
005-李大峰
001-李奇峰
002-吴娅晨
001-李奇峰
002-吴娅晨
005-李大峰
接下来我们把key的值换成Integer类型的时候,看看有什么变化
public class Map1 {
public static void main(String[] args) {
Map map=new HashMap();
Test test1=new Test(001, "李奇峰");
Test test2=new Test(005, "李大峰");
Test test3=new Test(002, "吴娅晨");
map.put(test1.getId(), test1.getName());
map.put(test2.getId(), test2.getName());
map.put(test3.getId(), test3.getName());
Set set=map.keySet();
Iterator it=set.iterator();
while (it.hasNext()) {
Integer integer = (Integer) it.next();
String name=map.get(integer);
System.out.println(integer+"-"+name);
}
TreeMap map2=new TreeMap();
map2.putAll(map);
Set set1=map2.keySet();
Iterator it1=set1.iterator();
while (it1.hasNext()) {
Integer integer = (Integer) it1.next();
String name=map2.get(integer);
System.out.println(integer+"-"+name);
}
}
}
来看输出内容
1-李奇峰
2-吴娅晨
5-李大峰
1-李奇峰
2-吴娅晨
5-李大峰
我们会看到,当key的值为String类型时,HashMap处于无序状态,当key值为int型时,HashMap又为有序状态
而TreeMap不管什么类型,都是有序状态。
以上呢就是我对于集合的全部理解内容,如有纰漏,请在评论区留言指正,谢谢