day17 集合框架 LinkedHashSet TreeSet Map 泛型
2017-01-13 08:51
411 查看
LinkedHashSet
LinkedHashSet类是HashSet类的子类:同时体现了双向链表和哈希表算法
哈希表算法:决定了存储位置.
双向链表算法:用来包装在迭代的时候就是插入时顺序.
LinkedHashSet相对于HashSet来说,性能更低,因为需要保证输出顺序.
问题:既然想保证元素的添加顺序,为何不直接使用List的实现类.
因为:LinkedHashSet类不仅可以保证添加顺序还包装元素不能重复.
该类底层使用红黑色算法(平衡二叉树).
可以对集合中的数据按照一定的规则来排序.
注意:使用TreeSet,一定要包装该集合中的元素必须是同一种数据类型.
Comparable---->compareTo()
Map和Set的关系
Map的常用的实现类:
Hashtable类:在没有集合框架之前,就使用Hashtable来表示映射关系.
现在已经不推荐使用,建议使用HashMap类.
HashMap类:底层使用Hash表算法,和Hashtable有和关系?
通过阅读源代码发现,Hashtable中的每一个方法都是用synchronized修饰,HashMap中没有使用synchronized修饰.
HashMap相对于Hashtable来说,性能较高,但是安全性较低.
和 ArrayList 和 Vector的区别相同.
-----------------------------------------------------------
LinkedHashMap类:保证Map中的key会记录添加顺序.
TreeMap类: 保证Map中的key会按照指定的规则来排序.
Map的使用
Collections
1先说个Arrays
泛型
? 通配符
LinkedHashSet类是HashSet类的子类:同时体现了双向链表和哈希表算法
哈希表算法:决定了存储位置.
双向链表算法:用来包装在迭代的时候就是插入时顺序.
LinkedHashSet相对于HashSet来说,性能更低,因为需要保证输出顺序.
问题:既然想保证元素的添加顺序,为何不直接使用List的实现类.
因为:LinkedHashSet类不仅可以保证添加顺序还包装元素不能重复.
package _01_LinkedHashSet; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Set; public class Demo1 { public static void main(String[] args) { Set set = new HashSet(); set.add("430"); set.add("Burnning"); set.add("kaka"); set.add("820"); System.out.println(set); //LinkedHashSet 从名字上可以看出存储在hash表里, //双向链表算法用来包装在迭代的时候就是插入时顺序. set = new LinkedHashSet(); set.add("one"); set.add("two"); set.add("Three"); System.out.println(set); } }TreeSet
该类底层使用红黑色算法(平衡二叉树).
可以对集合中的数据按照一定的规则来排序.
注意:使用TreeSet,一定要包装该集合中的元素必须是同一种数据类型.
Comparable---->compareTo()
package _02_TreeSet; import java.util.TreeSet; public class Demo1 { public static void main(String[] args) { TreeSet ts = new TreeSet(); ts.add(new Student("王",23,70)); ts.add(new Student("赵",23,80)); ts.add(new Student("周",23,90)); System.out.println(ts); } } class Student implements Comparable{ private String name; private int age; private int score; Student(String name,int age,int score){ this.name = name; this.age = age; this.score = score; } @Override public int compareTo(Object o) { Student other = (Student)o; if(this.score>other.score){ return 1; }else if(this.score<other.score){ return -1; } return 0; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + ", score=" + score + "]"; } }Comparator----->compare(Object o1,Object o2)
package _03_TreeSet; import java.util.Comparator; import java.util.Set; import java.util.TreeSet; public class Demo2 { public static void main(String[] args) { Set ts = new TreeSet(new StudentLength(){ public int compare(Object o1, Object o2) { Student2 s1 = (Student2)o1; Student2 s2 = (Student2)o2; if(s1.getName().length()>s2.getName().length()){ return 1; }else if(s1.getName().length()<s2.getName().length()){ return -1; } return 0; } }); Student2 s1 = new Student2("tea"); Student2 s2 = new Student2("mnnnnn"); Student2 s3 = new Student2("good"); Student2 s4 = new Student2("wills"); ts.add(s1); ts.add(s2); ts.add(s3); ts.add(s4); System.out.println(ts); } } class Student2 { private String name; Student2(String name){ this.name = name; } public String getName(){ return name; } @Override public String toString() { return "Student [name=" + name + "]"; } } class StudentLength implements Comparator{ @Override public int compare(Object o1, Object o2) { Student2 s1 = (Student2)o1; Student2 s2 = (Student2)o2; if(s1.getName().length()>s2.getName().length()){ return 1; }else if(s1.getName().length()<s2.getName().length()){ return -1; } return 0; } }Map
Map和Set的关系
Map的常用的实现类:
Hashtable类:在没有集合框架之前,就使用Hashtable来表示映射关系.
现在已经不推荐使用,建议使用HashMap类.
HashMap类:底层使用Hash表算法,和Hashtable有和关系?
通过阅读源代码发现,Hashtable中的每一个方法都是用synchronized修饰,HashMap中没有使用synchronized修饰.
HashMap相对于Hashtable来说,性能较高,但是安全性较低.
和 ArrayList 和 Vector的区别相同.
-----------------------------------------------------------
LinkedHashMap类:保证Map中的key会记录添加顺序.
TreeMap类: 保证Map中的key会按照指定的规则来排序.
Map的使用
package map; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Set; public class Demo1 { /** * @param args */ public static void main(String[] args) { Map map = new HashMap(); map.put("zz", 19); map.put("xx", 18); map.put("cc", 20); map.put("vv", 22); System.out.println(map); System.out.println("----------------------------------------"); Set t =map.keySet(); System.out.println(t); System.out.println("----------------------------------------"); Collection l = map.values(); System.out.println(l); System.out.println("----------------------------------------"); Set s2 = map.entrySet(); System.out.println(s2); for (Object object : s2) { Map.Entry entry = (Map.Entry)object; System.out.println(entry.getKey()+":"+entry.getValue()); } } }集合工具类
Collections
1先说个Arrays
package collections; import java.util.Arrays; import java.util.List; public class ArraysDemo { public static void main(String[] args) { String[] name = {"一","二","三"}; List list = Arrays.asList(name);//字符串转换为List集合 for (Object object : list) { System.out.println(object); } //list.add("四"); 转换的不能删除和添加 //List转换为数组 Object[] obj = list.toArray(); } }Collections讲的不多,这里就不写了.
泛型
? 通配符
相关文章推荐
- android studio 设置编码格式
- Android 网络防火墙的实现 Iptables解决方案
- 使用pycharm+pyqt5 调取界面程序
- jQuery实现的简单排序功能示例【冒泡排序】
- CSS基础入门2
- vim中的光标移动
- 浅谈~区块链的现状与未来!
- ${pageContext.request.contextPath}的作用
- python filter/map/reduce的用法
- Linux中最受欢迎的邮件传输代理(MTA)
- 抓取存储quota超过80%的users
- maven下载速度慢解决,国内镜像!
- Mysql 出现故障应用直接中断连接导致数据被锁(生产故障)详解
- NOIP2005 提高组第一题 谁拿了最多奖学金
- Vi编辑器命令
- js实现淡入淡出轮播切换功能
- Linux上安装Mysql及简单的使用详解
- python递归删除指定目录及其所有内容的方法
- PyQt5+python3+pycharm开发环境配置
- Dockerfile基础分享