Map接口下的实现类:

HashMap

1.存储原理:

  向HashMap中添加元素时,首先会调用hashCode(),算的哈希值,然后

  算出该元素在哈希表中的存储位置。

情况1

情况2(java  集合(Map2)写过了)

2.有必要时要重写 hashCode(), equals()

import java.util.*;

public class ex12 {
public static void main(String[] args) {
HashMap map = new HashMap();
map.put(new Person(110, "Tom"), 001);
map.put(new Person(220, "Jack"), 002);
map.put(new Person(330, "TNT"), 003);
map.put(new Person(110, "Bat"), 004);// 如果出现了相同的键,那么后添加的会取代原来的,可以观察运行结果 Tom 没有被输出
System.out.println(map); }
} class Person{
int id;
String name; public Person(int id, String name) {
this.id = id;
this.name = name;
} @Override
public String toString() {
return "[ id = " + this.id + ", name = " + this.name + " ]";
} @Override
public int hashCode() {
return this.id = id;
} @Override
public boolean equals(Object obj) {
Person p = (Person)obj;
return this.id == p.id;
}
}
{[ id = 330, name = TNT ]=3, [ id = 220, name = Jack ]=2, [ id = 110, name = Tom ]=4}

Process finished with exit code 0

TreeMap(注意下面代码中的泛型使用)

存储原理:基于红黑树的(二叉数)对键进行自然排序。

注意事项:1)向TreeMap添加元素时,如果元素的键具有自然顺序时,会按照自然顺序排序。

2)-----------------------,-----------------不具有自然顺序,要实现Compareable接口。

     3)-----------------------,--------------------------------,没有实现-----------------,必须在创建TreeMap时,传入比较器。

import java.util.*;

public class ex12 {
public static void main(String[] args) {
TreeMap<Emp, Integer> map1 = new TreeMap<Emp, Integer>();
map1.put(new Emp("Tom", 200), 100);
map1.put(new Emp("Tom", 20), 200);
map1.put(new Emp("Tom", 190), 300);
map1.put(new Emp("Tom", 200), 400);
System.out.println(map1); }
} class Emp implements Comparable<Emp>{
String name;
int salary; public Emp(String name, int salary) {
this.name = name;
this.salary = salary;
} @Override
public int compareTo(Emp o) {
return this.salary - o.salary;
} @Override
public String toString() {
return "[ name = " + this.name + ", salary = " + this.salary + " ]";
}
}
{[ name = Tom, salary = 20 ]=200, [ name = Tom, salary = 190 ]=300, [ name = Tom, salary = 200 ]=400}

Process finished with exit code 0

java 集合(Map3)的更多相关文章

  1. 032.[转] Java集合框架

    Java集合框架和各实现类性能测试 pphh发布于2017年11月17日 Java语言集合框架提供一系列集合接口类 (collection interface)和实现类,满足对集合中元素对象的各种集合 ...

  2. Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结

    2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...

  3. Scala集合和Java集合对应转换关系

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 用Scala编码的时候,经常会遇到scala集合和Java集合互相转换的case,特意mark一 ...

  4. java集合你了解多少?

    用了java集合这么久,还没有系统的研究过java的集合结构,今天亲自画了下类图,总算有所收获. 一.所有集合都实现了Iterable接口. Iterable接口中包含一个抽象方法:Iterator& ...

  5. 深入java集合学习1-集合框架浅析

    前言 集合是一种数据结构,在编程中是非常重要的.好的程序就是好的数据结构+好的算法.java中为我们实现了曾经在大学学过的数据结构与算法中提到的一些数据结构.如顺序表,链表,栈和堆等.Java 集合框 ...

  6. Java集合框架List,Map,Set等全面介绍

    Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I]   +--java.util.ArrayList [C]   +- ...

  7. Java集合框架练习-计算表达式的值

    最近在看<算法>这本书,正好看到一个计算表达式的问题,于是就打算写一下,也正好熟悉一下Java集合框架的使用,大致测试了一下,没啥问题. import java.util.*; /* * ...

  8. 【集合框架】Java集合框架综述

    一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...

  9. Java 集合框架

    Java集合框架大致可以分为五个部分:List列表,Set集合.Map映射.迭代器.工具类 List 接口通常表示一个列表(数组.队列.链表 栈),其中的元素 可以重复 的是:ArrayList 和L ...

随机推荐

  1. PHP 之 FastCGI 与 mod_php 详解

    背景 PHP最常用的方式是以模块的方式(mod_php)运行在Apache中,也是Apache运行PHP的默认方式:但在Nginx中,Nginx又使用的是PHP-FPM,但是PHP-FPM到底是个什么 ...

  2. adb命令大全「含shell和wait-for-devices等」

    adb shell 大全: http://adbshell.com/commands 下列表格列出了adb常见命令,注意,它并不是只有adb shell,shell只是其中一个. Category C ...

  3. address

    http://www.chsi.com.cn/ 学历查询网 http://www.gzzk.cc/ 广州自考网

  4. 自学QT笔记

    前言: Qt 是一个跨平台的 C++图形用户界面库,由挪威 TrollTech 公司于1995年底出品. Trolltech 公司在 1994 年成立,但是在 1992 年,成立 Trolltech ...

  5. .Net(C#)Parallel"循环"的解释以及与循环的比较

    Parallel 类提供对并行循环和区域的支持. 许多个人计算机和工作站都有两个或四个内核(即 CPU),使多个线程能够同时执行. 在不久的将来,计算机预期会有更多的内核. 为了利用当今和未来的硬件, ...

  6. .Net连接数据库-曾,删,改,查(AOD.Net)

    连接数据库 static void Main(string[] args) { //SqlConnection conn = new SqlConnection();//实例化 //conn.Conn ...

  7. BZOJ 1927 星际竞速(最小费用最大流)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1927 题意:一个图,n个点.对于给出的每条边 u,v,w,表示u和v中编号小的那个到编号 ...

  8. C++ 函数后加const

    1.非静态成员函数后面加const(加到非成员函数或静态成员后面会产生编译错误)2.表示成员函数隐含传入的this指针为const指针,决定了在该成员函数中,    任意修改它所在的类的成员的操作都是 ...

  9. Java _ JDK _ Arrays, LinkedList, ArrayList, Vector 及Stack

    (最近在看JDK源码,只是拿着它的继承图在看,但很多东西不记录仍然印象不深,所以开始记录JDK阅读系列.) (一)Arrays Arrays比较特殊,直接继承自Arrays ->List(Int ...

  10. [POJ1222]EXTENDED LIGHTS OUT(高斯消元,异或方程组)

    题目链接:http://poj.org/problem?id=1222 题意:开关是四连通的,每按一个就会翻转自己以及附近的四个格(假如有).问需要翻转几个,使他们都变成关. 把每一个灯看作一个未知量 ...