这篇文章主要讲解了“Java集合方法怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java集合方法怎么用”吧!
概述:
面向对象语言对事物的体现都是以对象的形式,为了方便多个对象的操作,就要对对象进行存储。另一方面,使用Array存储对象方面具有一些弊端,而Java集合就像一种容器,可以动态地多个对象的引用放入容器中。
Java集合类可以用于存储数量不等的对个对象,还可用于保存具有映射关系的关联数组。
使用:
存储对象可以考虑:①数组 ②集合
数组存储对象的特点:Student[] stu=new Student[20]; stu[0]=new Student(); ...
使用数组的弊端:一旦创建,其长度不可变。
真实的数组存放的对象的个数是不可知的。
集合:
List:元素有序、可以重复的集合 - - - - " 动态“ 数组
①ArrayList(主要的实现类)(底层是用数组实现的)
②LinkedList(对于频繁的插入、删除操作建议使用这个)(底层用链表实现的)
③Vector(古老的实现类、线程安全的)
Set:存储的元素是无序的,不可重复的!
无序性:无序性!=随机性。真正的无序性,指的是元素在底层存储的位置是无序的。
不可重复性:当向Set中添加进相同的元素的时候,后面的这个不能添加进去。
说明:要求添加进Set中的元素所在的类,一定要重写equals()和hashCode()方法。进而保证Set中元素的不可重复性!
Set中的元素是如何存储的呢?使用了哈希算法。
当向Set中添加对象时,首先调用此对象所在类的hashCode()方法,计算此对象的哈希值,此哈希值决定了此对象在Set中的存储位置。若此位置之前没有对象存储,则这个对象直接存储到此位置。若此位置已有对象存储,再通过equals()方法比较这两个对象是否相同,如果相同,后一个对象就不能再添加进来。
万一返回false呢?都存储(不建议如此)
>要求hashCode()方法要与equals()方法一致。
①HashSet(主要实现类)
②LinkedHashSet
使用链表维护了一个添加集合中的顺序。导致当我们遍历LinkedHashSet集合元素时,是按照添加进去的顺序遍历的。
LinkedHashSet插入性能略低于 HashSet,但在迭代访问 Set 里的全部元素时有很好的性能。
LinkedHashSet 不允许集合元素重复。
③TreeSet
向TreeSet中添加的元素,必须是同一个类的
TreeSet 不允许集合元素重复。
可以按照添加进集合中的元素的指定的顺序遍历。像String,包装类等默认按照从小到大的顺序遍历。
当Person类没有实现Comparable接口时,当向TreeSet中添加Person对象时,报ClassCaseException。
当向TrreSet中添加自定义类的对象时,有两种排序方法:
①自然排序:要求自定义类实现java.lang.Comparable接口并重写其compareTo(Object obj)的抽象方法,在此方法中,指明安装自定义类的哪个属性进行排序。
②定制排序: comparetTo()与hashCode()以及equal s()三者保持一致! 排序方式 见以下步骤
①创建一个实现了Comparator接口的类对象
>①向TrreSet中添加Customer类的对象,在此compare()方法中,指明是按照Customer的那个属性排序。
>②将此对象作为形参传递给TreeSet的构造器中。
>③向TrreSet中添加Comparator接口中的compare方法中涉及的类的对象。
向TreeSet中添加元素时,首先要按照compareTo()方法进行比较,一旦返回0,虽然仅是2个对象的此属性值相同,但是程序会认为这两个对象是相同的,进而后一个对象就不能添加进来
>comparetTo()与hashCode()以及equal s()三者保持一致!
Map接口:具有映射关系 " key-value对 " 的集合 - - - - 类似于高中的“ 函数 ”y=f(x) (x1,y1)(x2,y2);
①HashMap ②LinkedHashMap ③TreeMap ④Hashtable(子类:Properties)
size():返回集合中的元素(对象)的个数;
add(Object obj):向集合中添加一个元素(对象),任何类型都可以。
addAll(Collection coll):将形参coll中包含的所有元素添加到当前集合中。
isEmpty():判断一下这个集合是否为空
clear():清空集合元素
contains(Objetc obj):判断集合是否包含指定的obj元素。如果包含,返回true.反之返回false;
判断的根据:根据元素所在的类的equals() 方法进行判断
明确:如果存入集合中的元素是自定义类的对象。要求:自定义类要重写 equals() 方法。
System.out.println(对象);可以查看集合的元素
containsAll(Collection coll):判断当前集合中是否包含coll中所有的元素。
retainAll(Collction coll):求当前集合与coll的共有的元素,返回给当前集合
remove(Object obj):删除集合中的obj元素。若删除成功,返回true.反之返回false.
removeAll(Collection coll):从当前集合中删除包含在coll中的元素。
equals(Object obj):判断两个集合中的所有元素是否完全相同
hashCode():hash值(暂不明白);
roArray():将集合转化成数组。(用Object来进行接收)。
Collection coll=Arrays . asList(1,2,3):数组转化成集合。
iterator():返回一个Iterator接口实现类的对象,进而实现集合的遍历。
//方式一:不用 Iterator iterator=new Iterator(); System.out.println(iterator.next());//输出一个,有几个打印几次。。 //方式二:不用 for(int i=0;i<coll.size();i++){ System.out.println(iterator.next()); } //方式三:使用Iterator实现集合的遍历。 Iterator iterator=new Iterator(); while(iterator.hasNext()){ System.out.println(iterator.next()); }
//使用增强for循环实现集合的遍历 Collection coll=new ArrayList(); coll.add(123); coll.add("ASDF123"); coll.add("BB"); coll.add("AA"); coll.add(456); for(Object i:coll){//将coll赋值给i,然后打印i. System.out.println(i); }
List中相对于Collection,新增加的方法
> void add (int index, Object ele):在指定的索引位置添加元素
boolean addAll (int index, Collection eles):在指定索引位置添加一个元素集合
Object get (int index):获取指定索引位置的元素
Object remove (int index):删除指定索引位置的元素
Object set (int index, Object ele):设置指定索引位置的元素值
> int indexOf (Object obj) :返回obj在集合中首次出现的位置。没有的话。返回 -1
int lastIndexOf (Object obj):返回obj在集合中最后一次出现的位置。没有的话。返回 -1
List subList (int fromIndex, int toIndex):返回从fromeIndex到toIndex结束的左闭右开的一个子list
List常用方法:①增(add(Object ele)) ③改(set(int index, Object ele)) ⑤长度(sizi())
②删(remove) ④查(get(int index)) ⑥插(addAll(int index, Collection eles))
HashMap:Map的主要实现类,key是用Set来存放的,不可重复。
value是用Collection来存放的,可重复一个Key - value对。是一个Entry。所有的Entry是用Set来存放的,也是不可重复的。
向HashMap中添加元素时,会调用key所在类的equals()方法,判断两个key是否相同。若相同则只能添加进后添加的那个元素。
LinkedHashMap:使用链表维护添加进Map中的顺序,故遍历Map时,是按添加的顺序遍历的。
TreeMap:按照添加进Map中元素的Key的指定属性进行排序。要求:key必须是同一个类的对象!
针对key:①自然排序 vs ②定制排序
Hashtable:古老的实现类,线程安全,不建议使用
properties:常用来处理属性文件。键和值都为String类型的
Map与Collection并列存在。用于保存具有映射关系的数据:Key-Value
Map 中的 key 和 value 都可以是任何引用类型的数据
Map 中的 key 用Set来存放,不允许重复,即同一个 Map 对象所对应的类,须重写hashCode()和equals()方法。
常用String类作为Map的“键”。
key 和 value 之间存在单向一对一关系,即通过指定的 key 总能找到唯一的、确定的 value。
添加、删除
Object put(Object key,Object value):向Map中添加一个元素
Object remove(Object key):按照指定的Key删除此key - value
void putAll(Map t):将一个新的对象中的所有元素添加进来
void clear():清空
元素查询
Object get(Object key):获取指定key的value值。若无此Key,则返回null.
boolean containsKey(Object key):判断这个map当中是否包含指定的key的对。
boolean containsValue(Object value): 判断是否包含value的那个对。
int size():返回集合的长度
boolean isEmpty(): 判断元素是否为空
boolean equals(Object obj):是否equals另一个
元视图操作:遍历Map
Set keySet()
Collection values()
Set entrySet()
①遍历key集
Set set=new map.keySet(); for(Object obj:set){ System.out.println(obj); }
②遍历value集
Collection values=map.value(); Iterator i=values.iterator(); while(i.hasNext()){ System.out.println(i.next()); }
③遍历 key - value 对。
Set set=new map.keySet(); for(Object obj:set){ System.out.println(obj+"- - ->"+map.get(obj)); }
或者 :
Set set=map.entruySet(); for(Object obj:set){ Map.Entry entry =(Map.Entry)obj; System.out.println(entry.getKey()+"- - ->"+entry.getValue()); }
操作Collection以及Map的工具类:Collections
面试题:区分Collection和Collections
排序操作:
①reverse(List):反转 List 中元素的顺序
②shuffle(List):对 List 集合元素进行随机排序
③sort(List):根据元素的自然顺序对指定 List 集合元素按升序排序
④sort(List,Comparator):根据指定的 Comparator 产生的顺序对 List 集合元素进行排序
⑤swap(List,int, int):将指定 list 集合中的 i 处元素和 j 处元素进行交换
查找、替换:
①Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素
②Object max(Collection,Comparator):根据 Comparator 指定的顺序,返回给定集合中的最大元素
③Object min(Collection)
④Object min(Collection,Comparator)
⑤int frequency(Collection,Object):返回指定集合中指定元素的出现次数
⑥void copy(List dest,List src):将src中的内容复制到dest中
⑦boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换 List 对象的所有旧值
感谢各位的阅读,以上就是“Java集合方法怎么用”的内容了,经过本文的学习后,相信大家对Java集合方法怎么用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。