JAVA 类集

本文详细介绍了Java中的集合框架,包括Collection和Map接口及其常用实现类,如List、Set、Queue和SortedMap等,并探讨了它们的特点及使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    JAVA 中的类集主要分为两大块,一块是由Collection作为父接口的单值接口;另一块是以Map作为父接口的映射接口。

在Collection的子接口中,比较常用的有:List,Set,Queue,SortedSet接口;

在Map中,比较常用的子接口为SortedMap。

接下来介绍下这些接口的常用的具体实现类:

List:其内容是允许重复的(不会自动去重);

    a. ArrayList:

                List<String> list = null;//声明List对象
		list = new ArrayList<String>();//用ArrayList实例化List对象
		
		/*往List对象中添加元素*/
		list.add("wangjxy");
		list.add("zhangsan");
		list.add("lisi");
		
		list.remove("zhangsan");//删除元素

                /*判断List中是否包含某元素*/
		if(list.contains("wangjxy")){
			System.out.println("true");
		}
        
		String name = list.get(0);//根据下标直接取得某元素
		System.out.println(name);

                //类集的标准输出-运用迭代器
		Iterator<String> listIter = list.iterator();
		while(listIter.hasNext()){
			String outName = listIter.next();
			System.out.println(outName);}

注意:这里在运用remove()方法时候,直接提供元素去与List中的元素进行对比,当基本类型与String类型没有问题,但是如果为自定义的非系统类,则必须对该类产生的对象进行唯一性的比较鉴别措施,方法就是重写Object类中的两个函数-booleanequals(Object obj)和inthashCode(),从而能够让系统自动判别两个对象是否相等。(具体写法见后面)

    b. LinkedList:就是数据结构中的链表,使用方法与上类似,概念与数据结构中的链表一致。(同时可以发现,该类也实现了Queue接口,所以该类也可以进行队列的操作)。

    c. Stack:栈,与数据结构中的操作类似。

   

Set: 内容不允许重复,即会自动去重,因此,该接口的所有子类,如果是非系统类的对象,要重写上面提到的两个函数;

    a. HashSet: 散列,顾名思义,存进去的东西,是没有顺序的,而且跟存的先后也无关,因为是按照某个哈衣映射存储的。

    b. TreeSet: 该类同样也实现了SortedSet接口,因此该类是能够自动排序的(要完成非系统类的排序,是比去重,一致性鉴别更进一步的判别,因为不但要判断是否相等,还要判断大小,因此,定义这些非系统类对象的类,要通过比较器,即实现Comparable接口)。

注:对于类集的标准输出,代码中已经给出,是通过迭代器实现;而对于List接口的输出,还有一种双向迭代器-ListIterator可供使用,即除了booleanhasNext(),Enext()外,还有boolean hasPrevious(),Eprevious()可供使用,但是,由于一开始迭代器的指针是在头部,即最前面。因此,如果想要由后向前进行迭代输出,那么必须先后前向后把指针移动到最后。

Map:映射,即里面元素是成对出现的,如key->value;一组键名与键值是保存在Map内部接口Entry中的,常用的子类有:

    a. HashMap: 由Hash可知,该存放的元素是无序得,(但是保存顺序与输入顺序一致,与HashSet区别)而对于map来讲,有序无序,则是针对于key,跟value无关;同时该类的元素,即key,还是不可重复的;如:

        Map<String,String> map = null;//声明Map
	map = new HashMap<String,String>();//用HashMap实例化
		
	//向map添加元素
	map.put("A","wangjxy");
        map.put("B","zhangsan");
	map.put("C","lisi");

	String name = map.get("A");//得到A对应的值:wangjxy
	System.out.println(name);
        
        Set<String> keySet = map.keySet();//得到key的set形式,可进一步运用set取得key值;
        System.out.println(keySet);

        Collection<String> values = map.values();//得到value的Collection形式,可进一步取得value;
        System.out.println(values);

        //Map的标准输出,不是直接用迭代器,而是先要转换成Entry的Set然后再用迭代器
        Set<Map.Entry<String,String>> entrySet = map.entrySet();
        Iterator<Map.Entry<String,String>> entryIter = entrySet.iterator();
        while(entryIter.hasNext()){
            Map.Entry<String,String> entry = entryIter.next();
            System.out.println(entry.getKey()+"->"+entry.getValue());
        }</span>

    b. TreeMap:操作与HashMap类似,但是里面的数据是根据key来排序的。

    c. WeakHashMap:弱引用(了解);与HashMap的不同就是,改集合里面的元素,一旦调用System.gc后就会被回收清除。

        补充:对象的引用强度;

         -强引用:无论内存是否足够,引用对象都不会被清除;

         -软引用:只有当内存不足的时候,才会被gc回收清除;

         -弱引用:无论内存是否足够,一旦gc调用就立马清除回收;

         -虚引用:和无任何引用一样;

    d. IdentityHashMap:与HashMap的区别就是,集合里面的内容是可以重复的。

    小结:以上Map中的所有操作,凡是涉及到非系统类对象的比较删除,或者自动去重,都需要在相应的类中重写上面提到的两个函数;涉及的排序的,就要在类中实现比较器接口;equals()与Comparable接口的运用在前面文章提到过,这里不再重提,而hashCode()方法一般就是通过把非数字属性的hashCode乘上数字属性,如:

	public int hashCode(){
		    return this.name.hashCode()*this.age;//name为字符窜,age为整型		
        }


 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值