1.1集合类的概述

  Java.util包中提供了一些集合类,这些集合类右被称为容器。

  提到容器不难想到数组,集合类与数组不同之处是:

    数组的长度是固定长度,集合的长度是可变的;

    数组是用来存放基本数据类型,集合是用来存放对象的引用。

  常用的集合有List集合、Set集合和Map集合,其中List和Set继承了Collection接口,各接口还提供了不同的实现类。上述集合类的继承关系如图14.1所示:

  

 

 

 

1.1Collection接口

  Collection接口是层次结构中的根接口。构成Collection的单位元素。Collection接口通常不能直接使用,但该接口提供了添加元素、删除元素、管理数据的方法。由于List接口与Set接口都继承了Collection接口,因此这些方法对List和Set是通用的。

 

 

 

package jihelei;
import java.util.*;
public class Muster {//创建类
        public static void main(String args[]){
            Collection<String> list = new  ArrayList<>(); //实例化集合对象
            list.add("a");//向集合添加元素
            list.add("b");
            list.add("c");
            Iterator<String> it = list.iterator();//创建迭代器
            while(it.hasNext()){//判断是否有下一个元素
                String str= (String)it.next();//获取集合中的元素
                System.out.println(str);
            }
        }
}

 

 

 

 注意:Iterator的next()方法返回的是Object

2.List集合

  List集合包括List接口以及List接口的实现类。List集合中的元素允许重复,各元素的顺序就是对象插入的顺序。类似于Java数组,用户可通过索引来访问集合中的元素。

2.1List接口

  List接口除了继承了Collection接口的方法外,还定义了两个重要的方法。

  get(int index):获得指定索引位置的元素;

  set(int index,Object obj):将集合中指定索引位置的对象修改为指定对象。

  2.1.1List接口的实现类

    List接口的常用实现类有ArrayList与LinkedList。

    1.ArrayList类实现了可变的数组,允许保存所有值,包括null,可根据指定索引位置对集合快速访问,缺点是向指定索引位置插入或者删除对象的速度慢。

    2.LinkedList类采用链表结构保存对象。优点是便于向集合中插入和删除对象 ,但是对于随机访问集合中的对象,使用LinkedList实现List集合的效率低。

 

     

package jihelei;
import java.util.*;
public class Gather {
        public static void main(String[] args){
            List<String> list = new ArrayList<>();//创建集合对象
            list.add("a");//向集合中添加元素
            list.add("b");
            list.add("c");
            int i = (int)(Math.random()*list.size());
            System.out.println("随机获取数组中的元素:"+list.get(i));
            list.remove(2);//将指定索引位置的元素从集合中移出
            System.out.println("将索引为‘2’的元素从数组移除后,数组中的元素是:");
            for(int j=0;j<list.size();j++){
                System.out.println(list.get(j));
            }
        }
}

 

 

3.Set集合 

  .Set集合中的对象不按特定的方式排序,只是简单的添加到集合中,但set集合中不包括重复的对象,Set接口继承了Collection接口,所以包含了Collection的所有方法。

  Set接口的常用的实现类有Hash Set类和TreeSet类

  1.Hash Set类实现了Set接口,由哈希表支持,实际上是一个Hash Map实例,不保证迭代顺序,特别是不保证该顺序恒久不变,此类允许为null元素。

  2.TreeSet类不仅实现了Set接口,还实现了Java.util.SortedSet接口,在遍历集合时按照自然顺序递增排序,也可以按照比较器顺序递增排序。

 

 

 

 

package jihelei;
import java.util.Iterator;
import java.util.TreeSet;
public class UpdateStu implements Comparable<Object>{
    String name;
    long id;
    public UpdateStu(String name,long id){//构造方法
        this.id=id;
        this.name=name;
    }
    public int compareTo(Object o) {
        UpdateStu upstu = (UpdateStu) o;
        int result = id > upstu.id ? 1 : (id == upstu.id ?0:-1);
        return result;
    }
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name=name;
    }
    public long getId(){
        return id;
    }
    public void setId(long id){
        this.id=id;
    }

    public static void main(String[] args){
        UpdateStu stu1 = new UpdateStu("李同学",01011);//创建UpdateStu对象
        UpdateStu stu2 = new UpdateStu("陈同学",01021);
        UpdateStu stu3 = new UpdateStu("王同学",01051);
        UpdateStu stu4 = new UpdateStu("马同学",01012);
        TreeSet<UpdateStu> tree = new TreeSet<>();
        tree.add(stu1);
        tree.add(stu2);
        tree.add(stu3);
        tree.add(stu4);
        Iterator<UpdateStu> it = tree.iterator();//set集合中的所有的对象的迭代器
        System.out.println("Set集合中所有的元素:");
        while(it.hasNext()){//遍历
            UpdateStu stu = (UpdateStu)it.next();
            System.out.println(stu.getId()+" "+stu.getName());
        }
        it = tree.headSet(stu2).iterator();
        System.out.println("截取前面部分的集合:");
        while(it.hasNext()){
            UpdateStu stu = (UpdateStu)it.next();
            System.out.println(stu.getId()+" "+ stu.getName());
        }
        it = tree.subSet(stu2,stu3).iterator();//截取stu2到stu3之间的对象
        System.out.println("截取中间部分的集合:");
        while(it.hasNext()){
            UpdateStu stu = (UpdateStu)it.next();
            System.out.println(stu.getId()+" "+stu.getName());
        }
    }
}

 

 代码说明:存入TreeSet类实现的Set集合必须实现Comparable接口,该接口的compareTo(Object o)方法比较此对象与指定对象顺序。如果该对象小于、等于、或大于指定对象,则返回负整数数、0或正整数。

 

4.Map集合

  Map集合没有继承Collection接口,其提供的是key到value的映射,但是不能有相同的key,每个key只能对应一个value。key还决定了存储对象在映射中的存储位置,但是不由key对象本身决定的,而是通过一种“散列技术”进行处理,产生一个散列码的整数值。

  4.1Map接口

 

 

package jihelei;
import java.util.HashMap;
import java.util.Map;
import java.util.*;
public class map_UpdateStu {
    public static void main(String[] args) {
        Map<String,String> map = new HashMap<>();
        map.put("01", "李同学");
        map.put("02", "魏同学");
        Set<String> set = map.keySet();
        Iterator<String> it = set.iterator();
        System.out.println("key集合中的元素:");
        while (it.hasNext()) System.out.println(it.next());
        Collection<String> coll = map.values();
        it = coll.iterator();
        System.out.println("values集合中的元素是:");
        while (it.hasNext()) {
            System.out.println(it.next());
        }

    }
}

 

 注意:Map集合中允许值对象是null,而且没有个数限制。例如,可通过“map.put("05",null)”,语句向集合中添加对象。

  4.2Map接口的实现类

 

 

 

 

1.首先创建emp类

package jihelei;
public class map_emp {
    private String e_id;
    private String e_name;
    public map_emp(String e_id,String e_name){
        this.e_id=e_id;
        this.e_name=e_name;
    }
    public void sete_id(String e_id) {
        this.e_id = e_id;
    }
    public String gete_id() {
        return e_id;
    }
    public void sete_name(String e_name) {
        this.e_name = e_name;
    }
    public String gete_name() {
        return e_name;
    }
}

2.创建一个测试的主类,首先创建一个Map集合,并向其添加对象,分别遍历由两个类实现的map集合观察不同。(一个无序,一个有序)

package jihelei;
import java.util.*;
public class map_map {
    public static void main(String[] args) {
        //由HashMap实现的Map对象
        Map<String, String> map = new HashMap<>();
        map_emp emp1 = new  map_emp("351", "张三");//创建emp对象
        map_emp emp2 = new  map_emp("512", "李四");
        map_emp emp3 = new  map_emp("853", "王一");
        map_emp emp4 = new  map_emp("125", "赵六");
        map_emp emp5 = new  map_emp("341", "黄七");

        map.put(emp1.gete_id(), emp1.gete_name());//将对象 添加到集合中
        map.put(emp2.gete_id(), emp2.gete_name());
        map.put(emp3.gete_id(), emp3.gete_name());
        map.put(emp4.gete_id(), emp4.gete_name());
        map.put(emp5.gete_id(), emp5.gete_name());

        Set<String> set = map.keySet();//获取Map集合中的key对象集合
        Iterator<String> it = set.iterator();
        System.out.println("HashMap类实现的Map集合,无序:");
        while (it.hasNext()) {
            String str = (String) it.next();
            String name = (String) map.get(str);//遍历Map集合
            System.out.println(str + " " + name);
        }
        TreeMap<String, String> treemap = new TreeMap<>();//创建treemap集合对象
        treemap.putAll(map);
        Iterator<String> iter = treemap.keySet().iterator();
        System.out.println("TreeMap类集合实现对的Map集合,键对象升序:");
        while (iter.hasNext()) {
            String str = (String) iter.next();
            String name = (String) treemap.get(str);
            System.out.println(str + " " + name);
        }
    }
}

 

 

总结:集合类在Java中具有重要的地位,应该好好学习掌握。

posted on 2020-11-15 16:41  ZOne=w=  阅读(461)  评论(0编辑  收藏  举报