黑马程序员---2015.6.21.java基础笔记---TreeSet---HashSet---HashMap
来源:互联网 发布:淘宝开茶叶店 编辑:程序博客网 时间:2024/04/28 23:00
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1.TreeSet:可以对set集合中的元素进行排序,没有重复元素且有序!
自定义对象,必须实现Comparable接口,重写compareTo(T o) 方法底层数据结构是二叉树。
保证元素唯一性的依据是:compareTo方法return 0.
TreeSet排序的第一种方式:让元素自身具备比较性。
元素需要实现Comparable接口,覆盖compareTo方法。
这种方式也成为元素的自然顺序,或者叫做默认顺序。
HashSet:自定义对象,必须重写hashCode和equals方法
2.当元素自身不具备比较性,或者具备的比较性不是所需的。
这时需要让容器自身具备比较性。
定义了比较器,将比较器对象作为参数传递给TreeSet集合的构造函数
当两种排序都存在时,以比较器为主。
定义一个类,实现Comparator接口,覆盖compare方法
3.TreeSet自身具备比较性的示例。
/
* 按字符串的长度进行排序 1.TreeSet自身具备比较器 2.使用泛型 */ import java.util.*; class TreeSetTest { public static void main(String[] args) { TreeSet<String> ts = new TreeSet<String>(new StrLengthComparator()); ts.add("abcd"); ts.add("cc"); ts.add("cba"); ts.add("aaa"); ts.add("z"); ts.add("hahaha"); Iterator<String> it = ts.iterator(); while(it.hasNext()) { String s = it.next(); System.out.println("s:"+s); } } } class StrLengthComparator implements Comparator<String> { //所有的s1 和 s2调换一下,就会变成从大到下的输出 public int compare(String s1, String s2) { int num = s1.length() - s2.length(); if(num == 0) return s1.compareTo(s2); return num; } }
4.泛型:JDK1.5版本以后出现的新特性,用于解决安全问题,是一个类型安全机制。
好处!
a.将运行时期的问题ClassCastException,转移到了编译时期。
方便于程序员解决问题,让运行时期问题减少,安全。
b.避免了强制转化的麻烦。
泛型格式:通过<>来定义要操作的引用类型
在使用java提供的对象时,什么时候写泛型呢?
通常在集合框架中很常见。
只要见到<>就要定义泛型。
其实<>就是用来接收类型的。
当使用集合时,将集合中要存储的数据类型,作为参数传递到<>即可
5.什么时候定义泛型?
当类中要操作的引用数据类型不确定的时候。
6. 泛型类定义的泛型,在整个类中有效。如果被方法使用,
那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了。
为了让不同方法可以操作不同类型,而且类型还不确定。
那么可以将泛型定义在方法上。
特殊之处:
静态方法不可以访问类上定义的泛型。
如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上。
class Demo<T> { public void show(T t){ System.out.println(t); } } class Demo { public <T> void show(T t){ System.out.println(t); } public static <Q> void print(Q q){ System.out.println(q); } }
7. ? 通配符,也可以理解为占位符。
泛型限定: ?extends E:可以接收E类型或者E类型的子类型。上限。
?super R: 可以接收R类型或者R类型的父类型,下限。
8.Map集合
---Hashtable:底层是哈希表数据结构,不可以存入null键null值,该集合是线程同步
---HashMap:底层是哈希表数据结构,可以存入null键null值,该集合是不同步的
---TreeMap:底层是二叉树数据结构,线程不同步,可以用于给map集合中的键值进行排序。
和Set很像。
其实Set底层就是使用了Map集合
10.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接口中的一个内部接口。
/* 如果添加元素的键一样,值不一样,那么新存入的将覆盖原来的 put方法会返回本键原来的值value*/import java.util.*;class MapDemo{ public static void main(String[] args) { Map<String,String> map = new HashMap<String,String>(); //添加元素 map.put("01","zhangsan1"); map.put("02","zhangsan2"); map.put("03","zhangsan3"); map.put("04","zhangsan4"); //将Map集合中的映射关系取出来,放入Set集合 Set<Map.Entry<String,String>> entrySet = map.entrySet(); Iterator<Map.Entry<String,String>> it = entrySet.iterator(); while(it.hasNext()) { Map.Entry<String,String> me = it.next(); sop("key="+me.getKey()+";"+"value="+me.getValue()); } } public static void sop(Object o) { System.out.println(o); } public static void method() { Map<String,String> map = new HashMap<String,String>(); //添加元素 map.put("01","zhangsan"); map.put("02","zhangsan"); map.put("02","zhangsan2"); sop(map.put("02","zhangsan25")); sop("containsKey:"+map.containsKey("02")); //sop("remove:"+map.remove("02")); sop("get:"+map.get("05")); map.put("03",null); //获取map集合中所有的值 Collection<String> coll = map.values() ; sop("map中所有的值:"+coll); sop(map); } public static void method_keySet() { Map<String,String> map = new HashMap<String,String>(); //添加元素 map.put("01","zhangsan1"); map.put("02","zhangsan2"); map.put("03","zhangsan3"); map.put("04","zhangsan4"); //先获取map集合的所有键的Set集合 Set<String> keySet = map.keySet(); //获取迭代器 Iterator<String> it = keySet.iterator(); while(it.hasNext()) { String key = it.next(); String value = map.get(key); sop("key:"+key+ " value"+value); } }}
0 0
- 黑马程序员---2015.6.21.java基础笔记---TreeSet---HashSet---HashMap
- 黑马程序员----java基础HashSet和TreeSet总结
- JAVA学习笔记7 Hashset ,TreeSet , HashMap
- JAVA基础: HashSet\TreeSet
- 黑马程序员_学习笔记:10) 集合框架2:Set(HashSet、TreeSet)、Map(Hashtable、HashMap、TreeMap)、Collections、Arrays
- 黑马程序员—Java集合框架(Set、HashSet、TreeSet)
- 黑马程序员---2015.6.20java基础笔记---集合类--ArrayList---LinkedList---HashSet
- Java中的HashSet, TreeSet, HashMap, TreeMap
- 黑马程序员---HashSet,TreeSet的区别
- 黑马程序员--集合之HashSet/TreeSet原理
- 黑马程序员-Set-HashSet-TreeSet-Comparator-Comparable
- HashSet, TreeSet, HashMap, TreeMap
- java collections 集合基础学习 ArrayList,LinkedList, HashSet, TreeSet, HashMap, Stack,Queue,PriorityQueue
- 黑马程序员_JavaSE基础17 之 集合框架 Vector LinkedList ArrayList HashSet LinkedHasSet TreeSet
- 黑马程序员_JAVA笔记14——集合框架(List、HashSet、TreeSet)
- 黑马程序员_温习 集合三 (个人笔记)摘要(HashSet---TreeSet)
- (黑马程序员)学习笔记,Collection集合(ArrayList、LinkedList、Vector、HashSet、TreeSet)
- 黑马程序员------毕老师视频笔记第13-17天------集合Collection-Set-(HashSet、TreeSet)
- C++两个队列实现一个栈
- 欢迎使用CSDN-markdown编辑器
- [BZOJ 3295] CQOI 2011 动态逆序对 · 分块 & 逆序对
- 在myeclipse10中安装jad反编译工具
- html5中的问题总结
- 黑马程序员---2015.6.21.java基础笔记---TreeSet---HashSet---HashMap
- DML-数据更新
- struts 2 上传文件的位置
- POJ 1502 MPI Maelstrom (简单最短路,多种算法均可)
- java基础—IO流——转换流的操作
- 轻松搞定面试中的二叉树题目
- JFreeChart—输出组合图表
- 网络 -文件上传
- [Leetcode.python] 002. Add Two Numbers