Collection和Map实现类的比较

mac2026-01-10  9

Collection和Map实现类的比较

容器和Map子接口实现类底层实现存储特点CollectionListArrayList数组有序,可重;  LinkedList双向链表有序,可重  Vector数组有序,可重 SetHashSetHashSetHashMap->数组+链表+红黑树无序,不可重  TreeSetTreeMap->红黑树有序,不可重Map HashMap数组+链表+红黑树无序,不可重以键值对形式存储 TreeMap红黑树有序,不可重

 

解决问题一:使用Collection和Map的实现类,面对自定义引用数据类型,谁可能会需要调用比较器

1.比较器的使用

1.内部比较器|自然排序-----重写CompareTo方法

类实现Comparable接口,然后实现方法ComparaTo()方法,实现此接口的对象列表(和数组)可以通过 collections.sort() 和 Arrays.sort() 进行自动排序。

class Person implements Comparable<Person>{    private int age;    //p1.compareTo(p2),默认升序。    public int compareTo(Person o){        return(this.age-o.age)//根据身高升序排序        //return(o.age-this.age)//根据身高降序排序   } } ​ class a{ public static void main(String[] args) { Person p1 = new Person("张三",20); Person p2 = new Person("张一",15); Person p3 = new Person("张二",25); Person[] person ={p1,p2,p3}; System.out.println(Arrays.toString(person)); //排序        Arrays.sort(person); System.out.println(Arrays.toString(person)); } }

 

2.外部比较器|自定义比较器 ----- Comparator<T>接口

可以将 Comparator 传递给 sort 方法(如Collection.sort ()或Arrays.sort()),然后实现内容,从而允许在排序顺序上实现精确控制。还可以使用 Comparator 来控制某些数据结构有序set和有序映射的顺序。

有序set--->TreeSet

有序映射--->TreeMap

public class Compare01 { public static void main(String[] args) { Person p1 = new Person("张三",20); Person p2 = new Person("张一",15); Person p3 = new Person("张二",25); Person[] person ={p1,p2,p3}; System.out.println(Arrays.toString(person)); //可以将 Comparator 传递给 sort 方法        //每次都可以修改。        Arrays.sort(person,new Comparator(){ public int compare(Object o1,Object o2){ return ((Person)o1).getAge() - ((Person)o2).getAge();} });         System.out.println(Arrays.toString(person)); } }

 

3.比较器使用范围

比较器常用于有序的Collection或Map的实现类,且其内容中存放的是自定义引用数据类型,如自定义的Person类。有序的实现类有:ArraysList、LinkedList、Vector、TreeSet、TreeMap

解决问题二:使用Collection和Map的实现类,面对自定义引用数据类型,谁可能会需要调用去重的方法。

1.解决方法:自定义的引用数据类型去重问题需要在类中重写hascode()和equals方法。

2.实现类:Hashset、TreeSet、HashMap、TreeMap

其中,TreeMap的去重和排序都按照比较器规则来进行

解决问题三:各种Collection和Map的实现类的遍历方式

1.无索引的遍历方式 :所有Set、Map:Hashset、TreeSet、HashMap、TreeMap

1.for..each遍历

2.使用Iterator迭代器

2.有索引实现类的遍历方式 :所有List

1.for..each遍历

2.使用Iterator迭代器

3.普通for循环遍历

4.List特有:列表迭代器listIterator()

3.Map实现类的遍历方式

1.使用map.keySet()方法,返回所有key值,用Set接收。遍历Set用无索引实现类的遍历方式

2.使用map.values()方法,返回所有value值,用Collection接收。遍历Collection用无索引实现类的遍历方式

3.使用map.entrySet()方法,返回所有key-value键值对,Map.Entry<K,V>类型。用Set接收。遍历Set用无索引实现类的遍历方式

以map.entrySet()方法为例:

//map是HashMap对象 Set<Map.Entry<String,Tnteger>> sets = map.entrySet(); for(Map.Entry<String,Tnteger> entry:sets){        entry.getKey();        entry.getValue();   }

 

 
最新回复(0)