java类集

本文深入讲解Java集合框架,包括Collection、List、Set等接口的区别与使用,以及HashMap、TreeSet等常见实现类的特点。探讨了泛型、迭代器、Map接口的高级应用,并提供了实用的代码示例。
摘要由CSDN通过智能技术生成

Java类集

在使用各个类集接口时,如没有指定泛型,会出现警告信息。此时,泛型将被擦除而全部使用Object接收。

类集就是一个动态的对象数组。类集框架本身不受对象数组长度的限制。

Collection接口是单值存放的最大父接口,可以向其中保存多个单值(单个对象)数据。

开发中不一般不直接使用Collection接口,而是使用子接口。如使用Collection接口,表示的操作意义不明确。

List:可以存放重复的内容

Set:不能存放重复的内容,重复内容靠hashCode()equals()两个方法区分。

Queue:列队接口

SortedSet:可以对接口中的数据进行排序

List接口

可以存放重复的内容。

List常用的子类:

ArrayListList的子类,可以直接通过对象的多态性List接口实例化

实例一:

1、向接口中增加元素

Collection定义的方法:

l 增加一个元素:public boolean add(E o)

l 增加一组元素:public boolean addAll(Collection<? extends E >c)

List定义的方法:

在指定位置增加元素:public void add(int index, E element)

2、删除元素:

Collection定义的方法:

l 每次删除一个元素:public boolean remove(E o)

l 每次删除一组元素:public boolean removerAll(Collection<? >c)

List扩展的方法:

在删除指定位置元素:public E remove(int index)

对于自定义的的类如果要通过remove(Object o)方法来删除,则必须在类中覆写Object类的equals()hashCode()方法

3、输出List中的内容:

Collection接口取得全部数据长度的方法size();   list.size()

List接口中取得集合中指定位置元素:get(int index),两者结合可输出集合中的全部元素。

list.get(i)

4、将集合变为对象数组:

Collection中定义了toArray()方法,可将集合变为对象数组,由于在类集声明时已经通过泛型指定了集合中的元素类型,在接收时要使用泛型指定的类型。

如定义为String类型,在接收时也要使用String[]类型

LinkList表示的是一个链表的操作类

Queue表示的是队列操作接口

Set接口

Set接口也是Collection接口的子接口,与CollectionList接口不同的是:Set接口不能加入重复的元素。

Set接口常用的子类:

HashSet是接口的一个子类:里面不能存放重复元素,采用的散列的存储方式,所以没有顺序。

有序存放:TreeSet

在实际开发中经常会碰到区分同一对象的问题,所以,一个完整的类最好覆写Object类的hashCode()equals()toString()3个方法。

13.6集合的输出

如果要输出CollectionSet集合中的内容,可以将其转换为对象数组输出,而使用List则可以直接通过get()方法输出。但都不标准

类集中4种常见的输出方式:

Iterator:迭代输出,使用最多。(重点把握)

ListIterator:是Iterator的子接口,专门输出List中的内容

Enumeration:是一个旧的接口,功能与Iterator类似

Foreach:输出数组或集合

迭代输出:Iterator

只要是碰到了集合输出的操作,就一定使用Iterator接口

迭代输出就是将元素一个个进行判断,判断其是否内容,如果有内容则把内容取出。

Iterator接口在使用时需要指定泛型,(此处指定的泛型最好与集合中的泛型类型一致)

Iterator使用hasNext()判断是否有下一个值,并使用next()方法取出下一个元素。

使用迭代删除指定内容时应注意:应避免集合操作中也存在一个remove()方法,如果在使用Iterator输出时集合自己调用了删除方法,会出现运行时的错误。

双向迭代输出:ListIterator

Iterator接口的主要功能是有钱向后单项输出,

如果想实现由前向后或者是由后向前的双向输出,必须使用ListIterator接口(为Iterator的子接口)

ListIterator接口的相关操作:

1、双向迭代

ListIterator接口中的hasPrevious()方法由后向前判断,并使用previous()方法取出前一个元素。并且在使用ListIterator接口进行双向输出时,想完成由后向前的输出,则一定要先进性由前向后的输出

2、可使用add() set()方法增加或替换集合中的元素,但不推荐

foreach

foreach输出格式:for(类 对象:集合){
                 //集合操作

                 }

Enumeration接口:

方法与Iterator中类似,只是缺少删除数据的方法。而且在Web开发中此接口运用比较多。

使用hasMoreElements()方法迭代判断并通过nextElement()方法取出每一个元素(与Iterator中类似)

Map接口

CollectionSetList接口都属于单值的操作,即每次只能针对一个对象

Map每次操作是一对对象,即二元偶对象Map中的每个元素都使用key->value的形式存储在集合中。

Map上也应用了泛型,必须同时设置好keyvalue的类型。

Map.EntryMap内部定义的一个接口,专门用来保存key->value的内容。

Map的操作中,所有内容都是通过key->value的形式保存数据,对于集合来讲,实际上就是将key->value的数据保存在Map.Entry的实例之后,再在Map集合中插入一个Map.Entry的实例化对象。

Map接口的常用子类

想要使用Map接口必须依靠子类实例化。常用子类有

HashMap:无序存放的,是新的操作类,key不可以重复

Hashtable:无序存放的,是旧的操作类,key不可以重复

TreeMap:可以排序的Map集合,按照集合中的key排序,key不可以重复

WeakHashMap:当集合中的某些内容不再使用时清除无用的数据,使用gc进行回收。

HashMap类本身是Map的子类,直接使用此类为Map接口实例化即可。

HashMap相关操作:

1、向集合中增加和取出内容:

Map接口中通过put(Object key,Object value)方法向集合中增加内容,然后通过get (E key)方法根据key找出其对应的value

2、判断指定的keyvalue是否存在

使用Map接口中的containsKey(Object key)containsValue(Object value)两个方法。

3、输出全部的key

Map使用keySet()方法,将Map中的全部key变成一个Set集合,然后再使用Iterator输出。注意:接收Set集合中指定的泛型要和Mapkey的泛型类型保持一致。

4、输出全部的value

使用value()方法,此方法的返回类型是Collection,同样注意泛型的类型。再使用Iterator输出

自定义类作为key时类需要实现Comparable接口:

TreeMap 可以按照key排序,如使用的是String类作为keyString类本身已经实现了Comparable接口,不会有问题。如果是自定义的类作为key,则必须实现Comparable接口,否则会有异常。

Map子类中的数据都使用强引用保存,即里面的内容不管是否引用都始终在集合中保留。如希望自动清理集合中暂时不用的数据使用WeakHashMap类。

Java有四种级别的引用:强引用、软引用、弱引用、虚引用

Map接口的使用注意:

一、不能直接使用迭代输出Map中的全部内容

如一定要使用迭代输出,须按照以下步骤;(参考P530程序)

1) 将Map的实例通过entrySet()方法变为Set接口对象

2) 通过Set接口实例为Iterator实例化

3) 通过Iterator迭代输出,每个内容都是Map.Entry的对象

4) 通过Map.Entry进行key->value的分离。最终输出使用Map.Entry完成

二、直接使用非系统类作为key

需要依靠Object类中的hashCode()equals()的帮助。

如果要使用一个自定义的对象表示Map中的key,则对象所在的类中一定要覆写equals()hashCode()方法,否则无法找到对应的value。(但如表示Map中的value,是不需要覆写的)

key可以重复的Map集合:IdentityHashMap

Map中的key不允许重复,重复就是覆盖

如使用IdentityHashMap类,可以允许key重复,只要地址不一样就可以。

SortedMap接口

SortedMap接口是排序接口,只要实现了此接口的子类,都属于排序的子类。

集合工具类:Collections

1、返回不可变的集合

2、为集合增加内容,使用addAll()

3、直接使用Collections工具类中的reverse()方法即可将集合类中的内容反转保存。

4、检索内容,直接通过Collections类中binarySearch()方法即可完成内容的检索,检索之后会返回内容的位置

5、替换集合中的内容:

直接通过Collections类中replaceAll()方法即可替换一个集合中的指定内容。

6、集合排序:使用Collections类中的sort()方法对一个集合进行排序操作,但要求集合中每个对象所在的类必须实现Comparable接口

7、交换指定位置的内容,:使用swap()方法把集合中的两个位置的内容进行交换。

其他集合类

Stack类(栈)

属性类:Properties

XML文件格式:

所有的属性内容可以通过storeToXML()loadFormXML()两个方法以XML文件格式进行保存和读取。

1、设置和取得属性:setProperty()getProperty()方法设置和取得属性,类操作时要以String为操作类型。

2、将属性保存在普通文件中:直接使用sote()方法即可,同时指定OutputStream类型,指明输出的位置。

3、从普通文件读取属性内容:通过load()方法,从输入流中将保存的所有属性内容读取出来。

4、将属性保存在XML文件中

5、从XML文件中读取属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值