集合类(Collection、Map)基础

xiaoxiao2021-02-28  59

1、集合类基础:

1、Collection是最基本的集合接口(只包括Set和List), Map接口并不是Collection接口的子接口。

 A:list接口: Collection的子接口,允许有重复的元素,是有序的。有三个实用类:ArrayList,LinkedList,Vector(Stack)。

 B:set接口:是collection的子接口,不能包含重复的元素。set接口没有引入新的方法,即它所有的方法都是继承了父类collection中的方法。

set中有三个实用类:hashset,treeset,LinkedHashSet。

2、Map(interface): 使用键值对(key-value), 值(value)可以重复,键(key)不可以重复。     HashMap、LinkedHashMap、 Hashtale、TreeMap、weekhashmap可以实现Map接口。

 

Java集合可分为:set、map、list三种体系,set:无序、不重复集合,map:映射关系集合,list:有序重复集合。集合类位于java.util包下。常用的实现类:Hashset、Hashmap、ArrayList。

集合框架:囊括接口、实现和算法的集合框架。

使用集合框架部分优点:

(1)开发成本低,不用实现自己的集合类;

(2)代码质量提升;

(3)降低维护成本;

(4)复用性和可操作性高。

Java集合的两个派生接口:Collection和Map,二者是Java结合框架的根接口。

 2、Collection和Iterator接口

1、Collection接口定义的操作集合的方法:

add:添加元素,clear:清除元素,contains:是否包含元素,isEmpty:是否为空,remove:移除指定元素,size:个数,

Object[] toArray():集合转换成数组。

2、Iterator接口遍历集合元素,有三个方法: 

public interface Iterator<E> { boolean hasNext();//还有元素没有遍历返回true E next();//返回下一个元素 default void remove() {//删除集合上次next方法返回的元素 throw newUnsupportedOperationException("remove"); }

代码实例:

import java.util.HashMap; import java.util.Iterator; import java.util.Set; public class TestEveryDay { public static void main(String[] args) { HashMap<String, String> map = new HashMap<String, String>(); map.put("01", "zhangsan"); map.put("02", "lisi"); map.put("03", "wangwu"); Set<String> keySet = map.keySet();// 先获取map集合的所有键的Set集合 System.out.println("--------"); System.out.println(keySet); Iterator<String> it = keySet.iterator();// 有了Set集合,就可以获取其迭代器。 System.out.println("+++++++"); // System.out.println(it.next());//此处返回01,下面循环返回2个值 while (it.hasNext()) { System.out.println("循环"); String key = it.next();// next返回集合下一个元素 String value = map.get(key);// 有了键可以通过map集合的get方法获取其对应的值。 System.out.println("key:" + key + "-->value: " + value);// 获得key和value值 } } }

3、Set接口:

不允许包含相同元素,如果添同一个元素到set集合中,add方法返回false。判断两个对象用equals方法,不用==。所以添加的时候即使new两个不同对象但是值相同,也不能添加。因为equals返回true。只要两个对象equals比较返回true就不能添加。

1、典型实现HashSet:

如果两个对象的equals返回true,但是hashCode返回不同的值,也会保存在不同位置,与set集合规则有出入。因此hashCode对HashSet很重要,以此决定存储位置。

2、LinkHashSet:HashSet的子类,根据hashCode决定位置,同时使用链表维护次序,这样看起来是以插入顺序保存的,因此性能略低。

3、TreeSet:确保元素处于排序状态。使用红黑树的数据结构对元素进行排序,性能低于HashSet。

三个实现都是线程不安全的。

4、Map接口:

Map接口中常用方法:clear、contianskey、containsvalue、entryset、get、isempty、keyset、put、remove、size等等。

TreeMap实现类,基于红黑树实现,保证有序状态。

import java.util.HashMap; public class Mapex { public static void main(String[] args) { HashMap<Integer, String> map = new HashMap<Integer, String>(); map.put(1, "a"); map.put(2, "b"); map.put(3, "c"); for (HashMap.Entry<Integer, String> itemMap : map.entrySet()) { System.out.println(itemMap.getKey());// 1 2 3 // System.out.println(itemMap.getValue());// a b c } for (Integer itemMap : map.keySet()) { System.out.println(itemMap);//1 2 3 } } }

5、List接口:

ArrayList和Vector是List类的两个实现,ArrayList线程不安全,Vector线程安全,因此性能略低。

LinkedList:

6、操作集合的工具类Collections:

操作set、map、list等集合的工具类。

对list集合元素操作:

import java.util.ArrayList; import java.util.Collections; public class CollectionToList { public static void main(String[] args) { ArrayList<Integer> nums = new ArrayList<Integer>(); nums.add(2); nums.add(-5); nums.add(3); nums.add(0); /** * 排序 */ System.out.println(nums); Collections.reverse(nums);// reverse反转list集合元素 System.out.println(nums); Collections.sort(nums);// sort按自然顺序排序 System.out.println(nums); Collections.shuffle(nums);// 随机排序 System.out.println(nums); Collections.swap(nums, 0, 2);// 指定位置元素互换 System.out.println(nums); /** * 查找替换 */ System.out.println(Collections.max(nums)); // 最大最小值 System.out.println(Collections.min(nums)); Collections.replaceAll(nums, 0, 1); System.out.println(nums);// 0用1代替 System.out.println(Collections.frequency(nums, -5));// 判断-5出现次数 Collections.sort(nums);// sort按自然顺序排序 System.out.println(Collections.binarySearch(nums, 3));// 二分查找,只有排序的集合才能用 } }

 

转载请注明原文地址: https://www.6miu.com/read-2625272.html

最新回复(0)