java-集合下《五》

1.Map 接口

实现Map接口的集合类是通过"键-值"映射的方式来存储对象的。

"键-值"映射对是通过键来唯一标识,Map底层的"键"是用Set存放的(这就保证了它的唯一性,不重复)。

将键映射到值的对象。一个映射不能包含重复的键,每个键最多只能映射到一个值。

JDK API中Map接口的实现类常用的有:1,HashMap 2, TreeMap 3,HashTable(不常用)

注意:键和值都可以为null,但是键不能够重复,值可以重复

2.Map接口中常用的方法

Object  put (Object key, Object value) ; //将指定的“键—值”对存入Map中

注意:由于key的唯一性,如果再放入相同的key的键值对,则该键值对会覆盖原来的

Object  get (Object key); //通过key(键)取出所映射的值

Object  remove(Object key); //根据指定的"键"将其“键-值”对从map中删除。

boolean containsKey(Object key); //判断Map是否包含指定键的“键-值”对

boolean containsValue(Object value) ;//判断Map是否包含指定值的“键-值”对

boolean isEmpty(); //判断Map是否包含元素

int size(); //获取长度

void clear(); //清空Map中的所有“键-值”对

Set  keySet() ;//返回Map中所包含键的set集

Collection values(); //返回Map中所有的values的集合。

3.HashMap

HashMap内部对“键”用Set进行散列存放(HashSet),所以根据“键”去取"值"的效率很高

4.TreeMap

TreeMap内部对"键"用TreeSet的红黑树结构进行排序存放,所以放入TreeMap的"key-value"对的key

必须是可"排序"的。

5.Map.Entry 接口

Map.Entry是Map内部定义的一个接口,专门用来存放key-value的内容。

6.Collections工具类(与Collection<E>不同)

java.util.Collections 类是操作集合的工具类,提供一些静态方法实现基于集合的一些常用算法。

void sort (List list)  ;//List列表的所有元素必须都实现comparable接口,根据元素的自然顺序按升序排列

void shuffle (List list) ;//对List列表里的元素()随机排列。

void reverse(List list) ;//对List列表里的元素反转。

void copy(List dest ,List src);//src复制到dest中

void swap(List<?> list,int i,int j) ;//交换列表指定位置的元素

int   binarySearch(List <? extends T> list,T key); //寻找列表中某元素的位置,前提是已排序

元素 max(Collection<? extends ?> coll) ;//根据元素的自然顺序,返回给定collection中的最大元素

List  synchronizedList(List List) ;//返回指定列表支持的同步列表

注意:Collections:对集合进行操作的工具类,里面都是静态方法.
            Arrays:对数组进行操作的工具类,里面都是静态方法.

7.HashTable

旧版的HashTable ,操作大多跟HashMap相同。但是它保证线程的同步。

它有一个子类Properties(属性集)比较常用:

  • Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性集中每个键及其对应值都是一个字符串。
  • 不建议使用put 和putAll 这类存放元素方法,应该使用setProperty(Stringkey, Stringvalue)方法,
  • 因为存放的“键-值”对都是字符串。类似取值也应该使用getProperty(Stringkey)
  • 不支持泛型操作
//Properties示例,根目录下要存在config.properties文件
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class PropertiesTest {
public static void main(String[] args) {
//方法链
InputStream is = Thread.currentThread()
.getContextClassLoader()
.getResourceAsStream("config.properties");
Properties prop = new Properties();
try {
prop.load(is);
} catch (IOException e) {e.printStackTrace();}
String name = prop.getProperty("name");
String pwd = prop.getProperty("pwd");
System.out.println(name + ", " + pwd);
}
}

8.Map接口输出

1,Set<k> keySet:将map中所有的键存入到Set集合。因为set具备迭代器。
         所有可以迭代方式取出所有的键,在根据get方法。获取每一个键对应的值。

Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。

2,Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到了set集合中,
          而这个关系的数据类型就是:Map.Entry

Entry其实就是Map中的一个static内部接口。
          为什么要定义在内部呢?
          因为只有有了Map集合,有了键值对,才会有键值的映射关系。
          关系属于Map集合中的一个内部事物。
          而且该事物在直接访问Map集合中的元素。

对于Map接口来说,其本身是不能直接使用迭代进行输出的,因为Map中的每一个位置存放的是一对值(keyvalue),

而Iterator中每次只能找到一个值。所以如果非要使用迭代进行输出的话,要按照以下操作步骤完成:

  1. 将Map的实例通过entrySet()方法变为Set接口对象
  2. 通过Set接口实例为Iterator实例化
  3. 通过Iterator迭代输出,每个内容都是Map.Entry的对象
  4. 通过Map.Entry进行keyvalue的分离。getKey,getValue
Map<Integer,String> map = new HashMap<Integer,String>();
        //添加元素
        map.put(1, "bbb");
        map.put(2, "aaa");
        map.put(2, "eee");//如果键相同,则后面的元素会覆盖前面的元素.
        //键和值都可以为null,但是键不能够重复.值可以重复.
        //遍历Map 
        //1:先获得Map的key集合,再根据键获得值
        Set<Integer> set = map.keySet();
        //用增强for循环
        for(Integer i:set){
            System.out.println(i+":"+map.get(i));
        }
        //用Iterator进行遍历
        //2:获取Map的value集合.但是这个不能获取键.
        //3:用键值关系获取Map  ,键值关系保存在set集合里.
        //Map.Entry是描述Map集合的映射关系.
        Set<Map.Entry<Integer, String>> set2 =  map.entrySet();
        for(Map.Entry<Integer, String> m:set2){
            System.out.println("key:"+m.getKey()+"--value:"+m.getValue());
        }

Map大多时候用于查找,输出属于少数操作。

总结:

Map
|--Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0.效率低。
|--HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代,jdk1.2.效率高。
|--TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序

选择标准:
 存放要求
 无序-Set
 有序-List
 “key-value”对-Map
 读和改的效率
 Hash*-两者都最高
 Array*-读快改慢
 Linked*-读慢改快

时间: 2024-10-05 12:16:54

java-集合下《五》的相关文章

【由浅入深理解java集合】(五)——集合 Map

前面已经介绍完了Collection接口下的集合实现类,今天我们来介绍Map接口下的两个重要的集合实现类HashMap,TreeMap.关于Map的一些通用介绍,可以参考第一篇文章.由于Map与List.Set集合的某些特性有重合,因此观看本篇文章的会参考到之前的一些内容,最下方有链接.如果已经有这方面的基础,那么对Map的学习将会事半功倍. HashMap HashMap 是一个散列表,它存储的内容是键值对(key-value)映射. 既然要介绍HashMap,那么就顺带介绍HashTable

java集合(五)Queue集合之ArrayBlockingQueue 详解

一.ArrayBlockingQueue概述 ArrayBlockingQueue是java并发包下一个以数组实现的阻塞队列,它是线程安全的 public class ArrayBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, java.io.Serializable { 源码分析 主要属性 // 使用数组存储元素 final Object[] items; // 取元素的指针

【Java集合系列五】HashMap解析

2017-07-31 19:36:00 一.简介 1.HashMap作用及使用场景 HashMap利用数组+单向链表的方式,实现了key-value型数据的存储功能.HashMap的size永远是2^x的值,主要是为了更加均衡的使用数组位置. 2.存储key-value型数据的数据结构 如下代码,HashMap中定义了Node类,实现了Map.Entry接口,Entry接口只有set和get方法定义,极其简单.Node中定义了key.value.hash及指向下一个Node的指针next,Nod

Java集合篇五:HashMap

1.HasMap 自定义基础版 package com.test.collection; /** * 自定义实现Map功能 * map :存放键值对,根据键对象找对应的值对象 * @author chenx * */ public class MyMap001 { Entry[] arr=new Entry[999]; int size; public void put(Object key,Object value){ Entry e=new Entry(key,value); //解决键重复

Java集合(五)、Map接口介绍

https://blog.csdn.net/weixin_39554102/article/details/85424402 https://blog.csdn.net/ikv1989/article/details/79916754 原文地址:https://www.cnblogs.com/lixiansheng/p/11349386.html

浅入深出之Java集合框架(下)

Java中的集合框架(下) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,哈哈这篇其实也还是基础,惊不惊喜意不意外 ̄▽ ̄ 写文真的好累,懒得写了.. 温馨提醒:建议从(上)开始看哦~ 目 录 浅入深出之Java集合框架(上) 浅入深出之Java集合框架(中)   浅入深出之Java集合框架(下) 前 言 在<浅入深出之Java集合框架(中) >中介绍了Map接口的基本操作.使用的示例是在<浅入深出之Java集合框架(上)>中的模拟学

一大波Java来袭(五)——Java集合概述

把"Java集合"比作是容器,可以把多个对象(实际:是对象的引用),扔在容器中. JDK1.5之前,被丢进集合中的对象,会丢失起数据类型.默认为Object类型 JDK1.5之后,不会丢失数据类型,因为引入了"泛型"(作为下文重点) 本文将结合数据结构,重点讲述Java的4种集合体系的功能和用法,并给出不同应用场景改如何选择? 一.同样是用于"存储数据",既可以使用"数组",有可以使用"集合",有什么区别吗

【Java集合源码剖析】Java集合框架

Java集合工具包位于package java.util下.包含了一些常用的数据结构,如数组.链表(单/双向).树.栈.队列.哈希表等. Java集合框架大致可分为五部分:List列表.Set集合.Map映射.迭代器(Iterator.Enumeration).工具类(Arrays.Collections). Java集合类的整体框架如下: 如图,Java集合类大致分为两大类:Collection和Map. Collection主要包括两部分:List和Set. List接口通常表示一个列表(数

Java集合源码分析

Java集合工具包位于Java.util包下,包含了很多常用的数据结构,如数组.链表.栈.队列.集合.哈希表等.学习Java集合框架下大致可以分为如下五个部分:List列表.Set集合.Map映射.迭代器(Iterator.Enumeration).工具类(Arrays.Collections). 从上图中可以看出,集合类主要分为两大类:Collection和Map. Collection是List.Set等集合高度抽象出来的接口,它包含了这些集合的基本操作,它主要又分为两大部分:List和Se

Java - 集合框架完全解析

来自:http://www.jianshu.com/p/63e76826e852 数据结构是以某种形式将数据组织在一起的集合,它不仅存储数据,还支持访问和处理数据的操作.Java提供了几个能有效地组织和操作数据的数据结构,这些数据结构通常称为Java集合框架.在平常的学习开发中,灵活熟练地使用这些集合框架,可以很明显地提高我们的开发效率,当然仅仅会用还是不够的,理解其中的设计思想与原理才能更好地提高我们的开发水平.下面是自己对Java集合框架方面的学习总结. 一.概述 二.Collection接