Map集合以及Collections集合工具类

一、Collection集合主要特点与Map集合的区别

Collection:

单列集合;有两个子接口 List集合元素是有序的,可以重复的 Set集合元素是无序的,不可以重复

List:元素可重复,有序

ArrayList:底层数据结构是数组,查询快,增删慢,不同步,线程不安全,效率高;没有特殊说明一般使用ArrayList集合;

Vector:底层数据结构是数组,查询快,增删慢,同步,线程安全,效率低;有一个elements()特有迭代方法;

LinkedList:底层数据结构是链表,查询慢,增删快,不同步,线程不安全,效率高;有特有的增删方法;

Set:元素不可重复,无序

HashSet:底层数据结构是哈希表,由hashCode()和equals()方法支持它的不可重复性,且不保证迭代顺序,特别是不保证其顺序永久不变;

LinkedHashSet:继承HashSet 底层数据结构是哈希变和链表,所有是有序的,但是不可重复;

TreeSet:底层数据结构是红黑树数据结构(基于HashMap),保证元素唯一并且对其排序;

两种排序方式: 1、自然排序,需要元素所在的类实现Comparable接口,重写compareTo()方法;

2、选择器排序,创建TreeSet方法时需要创建Comparator接口的子实现类作为参数,并且重写其compare()方法。

Map:

双列集合;有两个主要子实现类 HashMap和TreeMap;Map集合是一种键值对的一种映射关系 key-value 其键唯一,值可重复。

二、Map<K,V>接口

1、概述:public interface Map<K,V>将键映射到值的对象;一个映射不能包含重复的键;每个键最多只能映射到一个值。

K - 此映射所维护的键的类型

V - 映射值的类型

2、Map集合主要方法:

添加功能:

V put(K key,V value):添加元素,如果键是第一次存储的时候,返回值null,如果键已经存在,再次存储的时候将第一次的值返回,并且后面的值覆盖掉前面的值

删除功能:

void clear()从此映射中移除所有映射关系(强拆)

V remove(Object key):删除键,返回值

判断功能:

boolean containsKey(Object key):判断当前Map集合中是否存在key:键

boolean containsValue(Object value):判断当前Map姐中是否存在value:值

获取功能:

Set<Map.Entry<K,V>> entrySet()返回一个键值对对象

V get(Object key)返回指定键所映射的值

Set<K> keySet():获取所有的键的集合

Collection<V> values():获取所有的值的集合

3、集合遍历:

A:方式一:使用keySet()方法,获取所有的键,再用键去获取所对应的值

HashMap<K,V> hm = new HashMap<K,V>();

//添加元素put(key,value)

Set<K> hs = hm.keySet();

for(K key : hs){

System.out.println(key + "---" + hm.get(key));

}

B:方式二:使用entrySet()方法,获取键值对对象,通过Map.Entry<K,Y>接口的getKey()、getValue()方法遍历集合

HashMap<K,V> hm = new HashMap<K,V>();

//添加元素put(key,value)

Set<Entry<K, Y>> s = hm.entrySet();

for(Entry<K, Y> se : s){

K key = se.getKey();

Y value = se.getValue();

system.out.println(key + "---" + value);

}

4、子实现类——HashMap

1)概述:HashMap集合是哈希表组成,并且他们的键允许null,值也可以允许null,,该类不能保证被元素的顺序恒久不变。

2)因为键的唯一性,所以在键的位置上存储自定义类的时候需要重写hashCode()和equals()方法;

值可以重复,不影响。

3)HashMap和Hashtable的区别

HashMap和Hashtable都实现了Map接口,他两是平级关系,Hashtable类似HashMap;

HashMap集合:允许有null键和null值,线程不安全,不同步,执行效率高;

Hashtable集合:不允许有null键和null,线程安全的,同步,效率低。

3)LinkedHashMap——extends HashMap

底层是有哈希表和链表组成,可以保证键的唯一性,和有序性(存取一致);

5、子实现类——TreeMap

1)底层基于红黑树的数据结构,该映射根据其键的自然顺序进行排序,或者根据其键进行选择器排序,具体取决于使用的构造方法

2)排序方式:(排序排的都是键,排序方式同TreeSet)

自然排序:要求储存在键位置上的元素的类implements Comparable接口并且重写compareTo()方法;

选择器排序:使用TreeMap(Comparator<T> comparator)构造器,使用匿名内部类的方式创建Comparator的子实现类对象,并重写compare()方法;

三、Collections —— 集合工具类

1、概述:对集合操作的工具类,没有构造方法,所有方法都由static修饰,可以直接调用;

2、常用方法:

public static <T> void sort(List<T> list):默认自然排序:将集合中的元素升序排序

默认的自然排序:需要元素所在的类implements Comparable接口,重写compareTo()方法,指定排序的方式;

比较器排序:public static <T> void sort(List<T> list,Comparator<T> c)

注意,如果两种排序方式都是使用了,那么最终结果遵从比较器排序。

public static <T> int binarySearch(List> list,T key):二分查找搜索法:key:查找的元素

public static void reverse(List list):反转功能(StringBuffer也有reverse功能)

public static void shuffle(List<?> list):随机置换,打乱顺序

四、集合嵌套遍历

1、ArrayList嵌套HashMap

/*需求:

假设ArrayList集合的元素是HashMap。有3个。

每一个HashMap集合的键和值都是字符串。

元素我已经完成,请遍历。

结果:

周瑜---小乔

吕布---貂蝉

郭靖---黄蓉

杨过---小龙女

令狐冲---任盈盈

林平之---岳灵珊*/

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Set;

public class ArratListTest {

public static void main(String[] args) {

ArrayList<HashMap<String,String>> al = new ArrayList<HashMap<String,String>>();

HashMap<String,String> hm1 = new HashMap<String, String>();

HashMap<String,String> hm2 = new HashMap<String, String>();

HashMap<String,String> hm3 = new HashMap<String, String>();

hm1.put("周瑜", "小乔");

hm1.put("吕布", "貂蝉");

hm2.put("郭靖", "黄蓉");

hm2.put("杨过", "小龙女");

hm3.put("令狐冲", "任盈盈");

hm3.put("林平之", "岳灵珊");

al.add(hm1);

al.add(hm2);

al.add(hm3);

for(HashMap<String,String> hm : al){

Set<String> keySet = hm.keySet();

for(String key : keySet){

System.out.println(key + "---" + hm.get(key));

}

System.out.println();

}

}

}

2、HashMap嵌套ArrayList

/*需求:

假设HashMap集合的元素是ArrayList。有3个。

每一个ArrayList集合的值是字符串。

元素我已经完成,请遍历。

结果:

三国演义

吕布

周瑜

笑傲江湖

令狐冲

林平之

神雕侠侣

郭靖

杨过 */

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Set;

public class HsahMapTest {

public static void main(String[] args) {

HashMap<String,ArrayList<String>> hm = new HashMap<String,ArrayList<String>>();

ArrayList<String> al1 = new ArrayList<String>();

al1.add("吕布");

al1.add("周瑜");

ArrayList<String> al2 = new ArrayList<String>();

al2.add("令狐冲");

al2.add("林平之");

ArrayList<String> al3 = new ArrayList<String>();

al3.add("郭靖");

al3.add("杨过");

hm.put("三国演义", al1);

hm.put("笑傲江湖", al2);

hm.put("神雕侠侣", al3);

Set<String> keySet = hm.keySet();

for(String key : keySet){

System.out.println(key);

ArrayList<String> valueList = hm.get(key);

for(String value : valueList){

System.out.println("\t" + value);

}

}

}

}

3、HashMap嵌套HashMap

/*HashMap嵌套HashMap

基础班

陈玉楼 20

高跃 22

就业班

李杰 21

曹石磊 23

先存储元素,然后遍历元素*/

import java.util.HashMap;

import java.util.Set;

public class HsahMapTest2 {

public static void main(String[] args) {

HashMap<String,HashMap<String,Integer>> hm = new HashMap<String,HashMap<String,Integer>>();

HashMap<String,Integer> hm1 = new HashMap<String, Integer>();

hm1.put("陈玉楼", 20);

hm1.put("高跃", 22);

HashMap<String,Integer> hm2 = new HashMap<String, Integer>();

hm2.put("李杰", 21);

hm2.put("曹石磊", 23);

hm.put("基础班", hm1);

hm.put("就业班", hm2);

Set<String> keySet = hm.keySet();

for(String key : keySet){

System.out.println(key);

HashMap<String, Integer> hashMap = hm.get(key);

Set<String> keySet2 = hashMap.keySet();

for(String key2 : keySet2){

System.out.println("\t" + key2 + "\t" + hashMap.get(key2));

}

}

}

}

时间: 2024-07-30 10:02:54

Map集合以及Collections集合工具类的相关文章

集合框架之Arrays工具类的asList()方法的使用

一:字符串数组转集合 1 String[] str = { "ds", "df", "da", "dfg" }; 2 List<String> array = new ArrayList<>(); 3 array = Arrays.asList(str); 4 System.out.println(array); 5 // array.add("retu"); 6 // 错误;数组转

java中map和对象互转工具类的实现示例

在项目开发中,经常碰到map转实体对象或者对象转map的场景,工作中,很多时候我们可能比较喜欢使用第三方jar包的API对他们进行转化,而且用起来也还算方便,比如像fastJson就可以轻松实现map和对象的互转,但这里,我想通过反射的方式对他们做转化,也算是对反射的学习和研究吧: 1.map转对象: 主要思路,将map中的key-value取出来,然后和给定的对象去匹配,为了使工具方法更具通用性,直接通过反射的方式将给定对象的属性获取到,然后调用反射相关的API和map中的key-value进

集合框架1.7之Collections静态工具类

Collections类提供了一些列静态的方法,用以更方便地操作集合类 排序机制 一个List可以通过下面的方法进行排序: Collections.sort(list); 如果List包含的是字符串,将会按照字母表排序:如果List包含的是Date类型数据,会按照日期先后排序--这是怎么实现的呢?String和Date都实现了comparable接口,此接口强行对实现它的每个类的对象进行整体排序.这种排序被称为类的自然排序,类的compareTo 方法被称为它的自然比较方法. 实现此接口的对象列

apache commons collections CollectionUtils工具类简单使用

CollectionUtils提供很多对集合的操作方法,常用的方法如下 import org.apache.commons.collections.CollectionUtils; import java.util.ArrayList; import java.util.List; public class CollectionUtilsTest {      public static void main(String[] args) {         List<Integer> a = 

day07(Set接口,HashSet类,hashcoad(),Collections工具类,Map集合)

Set接口 set接口的实现类特点 1.无序(取出来的顺序和存进去的数据的顺序不一致) 2.唯一(数据不能存相同的) 底层是用Map集合写的 HashSet类  实现了  set接口       唯一性  public class HashSetTest { public static void main(String[] args) { HashSet<String> hs=new HashSet<String>(); hs.add("hello"); hs.

迭代器遍历【List、Set、Map】&amp;&amp; 遍历集合的方法总结 &amp;&amp; Collections工具类

整理&&总结 迭代器遍历Iterator[List.Set.Map]example 1 package boom.collection; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.HashSet; 6 import java.util.Iterator; 7 import java.util.List; 8 import java.util.Map; 9 import jav

Java基础---泛型、集合框架工具类:collections和Arrays

第一讲     泛型(Generic) 一.概述 1.JDK1.5版本以后出现的新特性.用于解决安全问题,是一个类型安全机制. 2.JDK1.5的集合类希望在定义集合时,明确表明你要向集合中装入那种类型的数据,无法加入指定类型以外的数据. 3.泛型是提供给javac编译器使用的可以限定集合中的输入类型说明的集合时,会去掉“类型”信息,使程序运行效率不受影响,对参数化的泛型类型,getClass()方法的返回值和原始类型完全一样. 4.由于编译生成的字节码会去掉泛型的类型信息,只要能跳过编译器,就

黑马程序员---java基础---集合框架工具类:Collections和Arrays

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------        Collections 一.概述 Collections是对集合框架的一个工具类.它里边的方法都是静态的,不需要创建对象.并未封装特有数据. 在Collections工具类中大部分方法是用于对List集合进行操作的,如比较,二

黑马程序员——黑马基础——Map,集合框架工具类Conlections和Arrays

黑马程序员--黑马基础--Map,集合框架工具类Conlections和Arrays ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一,Map集合 Map<K,V>集合是一个接口,和List集合及Set集合不同的是,它是双列集合,并且可以给对象加上名字,即键(Key). 特点: 1)该集合存储键值对,一对一对往里存 2)要保证键的唯一性. Map集合的子类 Map |--Hashtable:底层是哈希表数据结构,不可以存入null键nu