黑马程序员_java基础--集合框架(3)
来源:互联网 发布:杭州知彼 编辑:程序博客网 时间:2024/06/05 13:34
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
Map
Map:顶层接口,该集合存储的是键值对,而且键是唯一的,Map和Set很像,Set集合底层就是使用了Map集合。
Map集合没有迭代器,要取出元素必须先将Map集合转换成Set集合才能遍历元素
|--->HashTable(JDK1.0):
底层是哈希表数据结构;
不可以使用null键和null值;
用作键的对象必须实现hashCode和equals方法来保证键的唯一性
线程同步,效率低
|--->HashMap(JDK1.2):
底层是哈希表数据结构;
允许使用null键和null值;
线程不同步,效率高;
保证元素唯一性的:
原理:先判断元素的hashCode值是否相同,再判断两元素的equals方法是否为true
(往HashSet里面存的自定义元素要复写hashCode和equals方法,
以保证元素的唯一性!)
class Student { private String name; private int age; public Student(String name, int age) { super(); this.name = name; this.age = age; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public int hashCode(){ return name.hashCode()+age*34; } @Override public boolean equals(Object obj){ if(!(obj instanceof Student)) return false; Student stu = (Student)obj; return this.name.equals(stu.name)&&this.age==stu.age; } public class HashMapDemo1 { public static void main(String[] args) { Map<Student , String> hmap = new HashMap<Student , String>(); hmap.put(new Student("001",20), "beijing"); hmap.put(new Student("002",25), "hebei"); hmap.put(new Student("003",50), "hainan"); hmap.put(new Student("001",20), "beijing"); System.out.println(hmap.size()); Set<Student> keySet = hmap.keySet(); Iterator<Student> it = keySet.iterator(); while(it.hasNext()){ Student stu = it.next(); String addr = hmap.get(stu); System.out.println(stu.getName()+".."+stu.getAge()+"::"+addr); } } }
|--->TreeMap(JDK1.0):
底层是二叉树结构;
允许使用null键和null值;
线程不同步;
可以给Map集合中的键进行排序.
TreeMap排序的第一种方式:让元素自身具备比较性,比如八种基本数据类型或则字符串,
实现Compareble接口,覆盖compareTo方法,
此方式是元素的自然顺序
TreeMap排序的第一种方式:当元素自身不具备比较性(比如存储学生对象时)或者具备的
比较性不是我们所需要的比较性时(比如想字符串的长度排序),
此时就需要让集合自身具备自定义的比较性。
那如何让集合自身具备比较性呢?可在集合初始化时,
就让集合具备比较方式。即定义一个类,
实现Comparator接口,覆盖compare方法。
class Student implements Comparable<Student>{ private String name; private int age; public Student(String name, int age) { super(); this.name = name; this.age = age; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public int compareTo(Student stu) { int num = new Integer(this.age).compareTo(new Integer(stu.age)); if(num==0) return this.name.compareTo(stu.name); return num; } } public class HashMapDemo1 { public static void main(String[] args) { Map<Student , String> tmap = new TreeMap<Student , String>(); tmap.put(new Student("001",20), "beijing"); tmap.put(new Student("002",25), "hebei"); tmap.put(new Student("003",50), "hainan"); tmap.put(new Student("001",20), "beijing"); System.out.println(tmap.size()); Set<Student> keySet1 = tmap.keySet(); Iterator<Student> it1 = keySet1.iterator(); while(it1.hasNext()){ Student stu = it1.next(); String addr = tmap.get(stu); System.out.println(stu.getName()+".."+stu.getAge()+"::"+addr); } } }
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
- 黑马程序员_java基础--集合框架(3)
- 黑马程序员_java基础集合框架
- 黑马程序员_Java基础Day14_集合框架
- 黑马程序员_Java基础_集合框架
- 黑马程序员_Java基础_集合框架
- 黑马程序员_java基础_集合框架
- 黑马程序员_Java基础_集合框架(二)_15
- 黑马程序员_Java基础_集合框架(三)_16
- 黑马程序员_Java基础_集合框架(四)_17
- 黑马程序员_java基础--集合框架(1)
- 黑马程序员_java基础--集合框架(2)
- 黑马程序员_Java基础——集合框架(上)(第3篇)
- 黑马程序员_java集合框架
- 黑马程序员_java集合框架
- 黑马程序员_java集合框架
- 黑马程序员_JAVA集合框架
- 黑马程序员_Java集合框架
- 黑马程序员_java基础集合
- 数据导入:Mysql to MSSql ---Mysql数据导入Sql Server 工具。
- STM32_FSMC_TFT控制原理(2012/01/03)
- Git和Repo管理使用简要介绍
- B树、B-树、B+树、B*树都是什么
- ffos中WebAPI回调不能执行
- 黑马程序员_java基础--集合框架(3)
- ajax的再次封装!
- Linux端口占用解决
- spring接收对象数组实例
- 从CM刷机过程和原理分析Android系统结构
- 字符编解码的故事(ASCII,ANSI,Unicode,Utf-8区别)
- Oracle 多行合并一行 方法
- 深入理解HTTP协议
- Session 与 Cookie--- 深入分析 Java Web 技术内幕,第 10 章