笔记
一、Set
无序的 不可重复的
set的子类:HashSet TreeSet
遍历方法: 遍历 :1)for…each 2)迭代器*/
public class SetDemo01 {
public static void main(String[] args) {
Set<String> set=new HashSet();
//添加
set.add("稻香");
set.add("可爱女人");
set.add("算什么男人");
set.add("不爱我就拉倒");
set.add("告白气球");
System.out.println(set.add("陶喆"));
System.out.println(set.add("算什么男人") ); //去重 放不进去
//存储的顺序和真实容器中数据的顺序不一致,内部是根据自己的算法计算,然后存储顺序一旦确定会在改变
System.out.println(set);
//删除
System.out.println(set.remove("稻香"));
System.out.println(set);
//for--each
for(String s:set){
System.out.println(s);
}
//迭代器
Iterator<String> it=set.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
1.2、HashSet
无序的 不可重复的
底层:底层由哈希表(hashtable)实现 :数组+链表|二叉树
优点:查询快,添加快,删除快
缺点:不可重,无序的
HashSet去重:
内部会先调用hashcode()方法,计算两个对象的hash值是否相同,如果不相同确定不是相同的对象,如果相同,再进一步比较equals方法中的内容
height 180 age 15 195
height 175 age 20 195
190 30 220
HashSet<Student> hs=new HashSet();
hs.add(new Student("刘亦菲",18));
hs.add(new Student("郑爽",17));
hs.add(new Student("郑爽",17));
System.out.println(hs);
System.out.println(hs.contains(new Student("郑爽",17)));
Map<Student,Integer> map=new HashMap();
map.put(new Student("刘亦菲",18),101);
map.put(new Student("郑爽",17),102);
map.put(new Student("郑爽",17),103);
System.out.println(map.get(new Student("郑爽",17)));
1.3、TreeSet
底层:二叉树(红黑树)实现
优点:,有序(内容会自动升序排序),查询效率高(根据内容查询),查询速度>list,根据索引查询还是List快
缺点:查询没有HashSet效率高
去重:对象类型进行排序,要这个类实现Comparable,重写ComparaTo方法,自定义比较规则
/*TreeSet<Integer> tree=new TreeSet();
tree.add(103);
tree.add(99);
tree.add(120);
tree.add(111);
tree.add(111);
System.out.println(tree);*/
TreeSet<Person> tree=new TreeSet();
tree.add(new Person("刘诗诗",25)); //
tree.add(new Person("蔡依林",30)); //
tree.add(new Person("蔡徐坤",20)); //
System.out.println(tree);
二、 Map
键值对形式的数据 key->value
Key–>set集合
vlaue–>Collection集合 可重复的
一个key对应一个value
key是不可重复的
value是可重复的
2.1、放数据V put(K key, V value)
map.put(1003, "呵呵");
key不相同,value相同
map.put(1000, "哈哈");
//key相同,value不同的
System.out.println(map.put(1001, "嘻嘻")); //key相同,value会覆盖,返回被覆盖的value
System.out.println(map);
/*
2.2、boolean containsKey(Object key)
如果此映射包含指定键的映射关系,则返回 true。
System.out.println(map.containsKey(1003));
2.3、boolean containsValue(Object value)
如果此映射将一个或多个键映射到指定值,则返回 true。
System.out.println(map.containsValue(null));
2.4、V get(Object key)
System.out.println(map.get(1201)); //不存在返回null
2.5、V remove(Object key)
System.out.println(map.remove(1021));
System.out.println(map);
遍历:
1.获取所有的set->set集合 keySet
2.直接获取所有的值
3.Set<Map.Entry<K,V>> entrySet()
Map<Integer,String> map=new HashMap();
遍历1 获取所有的set
Set<Integer> set=map.keySet();
for(Integer i:set){
System.out.println(map.get(i));
}
//遍历2
Collection<String> col=map.values();
for(String s:col){
System.out.println(s);
}
//遍历3
Set<Map.Entry<Integer,String>> set=map.entrySet();
for(Map.Entry<Integer,String> m:set){
System.out.println(m.getKey()+"-->"+m.getValue());
}
三、HashMap:
HashSet是由HashMap的key维护,底层也是哈希表实现
对象类型去重:对Map中的key进行去重,要重写hashCode和equals方法,如果想要根据value进行去重,手动遍历并判断
TreeMap: 升序
TreeSet是由TreeMap的key去维护的,底层实现也是通过二叉树实现的
对象类型去重:实现Comparable接口,重写ComparaTo方法
HashTable:
Hashtable和HashMap实现相同,Hashtable是线程安全的,HashMap线程不安全
四、Properties
存储键值对形式的数据,是Hashtable的子类
特点:键值对都会String类型的数据
Properties p=new Properties();
p.setProperty("1", "哈哈");
p.setProperty("2", "呵呵");
p.setProperty("3", "嘿嘿");
p.setProperty("3", "哼哼"); //key相同,值覆盖
System.out.println(p);
System.out.println(p.getProperty("2"));
p.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.haha"));
System.out.println(p.get("age"));
五、Collections 工具类
void sort(List) //对 List 容器内的元素排序,按照升序进行排序。
void shuffle(List) //对 List 容器内的元素进行随机排列
void reverse(List) //对 List 容器内的元素进行逆续排列
void fill(List, Object) //用一个特定的对象重写整个 List 容器
int binarySearch(List, Object)//采用折半查找的方法查找特定对象
List<String> ls=new ArrayList();
ls.add("元旦");
ls.add("春节");
ls.add("端午节");
ls.add("中秋节");
ls.add("清明节");
List<Person> ls=new ArrayList();
ls.add(new Person("紫霞仙子",18));
ls.add(new Person("朱茵",16));
System.out.println(ls);
Collections.sort(ls);
System.out.println(ls);
Collections.shuffle(ls);
System.out.println(ls);
Collections.reverse(ls);
System.out.println(ls);
Collections.fill(ls,"国庆节");
System.out.println(ls);
System.out.println(Collections.binarySearch(ls,"清明节"));