1.Set接口
1.1 概述
一个不包含重复元素的 collection
数据无序(因为set集合没有下标)
由于集合中的元素不可以重复。常用于给数据去重
1.2 特点
HashSet:底层是哈希表,包装了HashMap,相当于向HashSet中存入数据时,会把数据作为K,存入内部的HashMap中。当然K仍然不许重复
TreeSet:底层就是TreeMap,也是红黑树的形式,便于查找数据
HashMap实现中,当哈希值相同的对象,会在同一个hash值的位置存储不同属性的数据
1.3 常用方法
boolean add(E e):添加元素
boolean addAll(Collection c):把小集合添加到大集合中
boolean contains(Object o) : 如果此 collection 包含指定的元素,则返回 true
boolean isEmpty() :如果此 collection 没有元素,则返回 true
Iterator<E> iterator():返回在此 collection 的元素上进行迭代的迭代器
boolean remove(Object o) :从此 collection 中移除指定元素的单个实例
int size() :返回此 collection 中的元素数
Objec[] toArray():返回对象数组
1.4 练习:测试常用方法
package cn.tedu.set;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class Test1_Set {
public static void main(String[] args) {
Set set = new HashSet();
set.add("hello");
set.add("b");
set.add("a");
set.add("world");
set.add("b");
//不存重复元素,元素无序
System.out.println(set);
//迭代器
Iterator it = set.iterator();
while (it.hasNext()){
System.out.println(it.next());
}
}
}
2.HashSet
2.1 概述
此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素
2.2 练习:获取HashSet里的元素
package cn.tedu.set;
import java.util.HashSet;
import java.util.Iterator;
public class Test2_Set {
public static void main(String[] args) {
HashSet set = new HashSet();
set.add("a");
set.add("e");
set.add("b");
set.add("a");
set.add("b");
System.out.println(set);//无需,不重复
Iterator it = set.iterator();
while (it.hasNext()){
System.out.println(it.next());
}
}
}
3.Map接口
3.1 概述
java.util接口 Map<K,V>
类型参数: K - 此映射所维护的键的类型V - 映射值的类型
也叫哈希表、散列表。常用于存 键值对 结构的数据。其中的键不能重复,值可以重复
key | value |
---|---|
9527 | 唐伯虎 |
9528 | 如花 |
3.2 特点
可以根据键 提取对应的值
键不允许重复,如果重复值会被覆盖
存放的都是无序数据
初始容量是16,默认的加载因子是0.75
3.3 继承接口
3.4 常用方法
void clear()
从此映射中移除所有映射关系(可选操作)
boolean containsKey(Object key)
如果此映射包含指定键的映射关系,则返回 true
boolean containsValue(Object value)
如果此映射将一个或多个键映射到指定值,则返回 true
V get(Object key)
返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null
boolean isEmpty()
如果此映射未包含键-值映射关系,则返回 true
V put(K key, V value)
将指定的值与此映射中的指定键关联(可选操作)
void putAll(Map<? extends K,? extends V> m)
从指定映射中将所有映射关系复制到此映射中(可选操作)
V remove(Object key)
如果存在一个键的映射关系,则将其从此映射中移除(可选操作)
int size()
返回此映射中的键-值映射关系数
Set<Map.Entry<K,V>> entrySet()
返回此映射所包含的映射关系的 Set 视图
3.5 练习:测试常用方法
package cn.tedu.map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Test3_Map {
public static void main(String[] args) {
Map map = new HashMap();
map.put("001", "钢铁侠");
map.put("002", "蜘蛛侠");
map.put("003", "绿巨人");
map.put("004", "灭霸");
map.put("005", "美国队长");
map.put("005", "凤姐");
System.out.println(map.containsKey("001"));
System.out.println(map.containsValue("美国队长"));
System.out.println(map.isEmpty());
System.out.println(map.get("003"));
System.out.println(map.remove("001"));
System.out.println(map.size());
Map map2 = new HashMap();
map2.put("999", "刘德华");
map.put(null, null);//可以存入键为null,值也null的数据
map.putAll(map2);
System.out.println(map);
//keySet()返回键的set集合,把map的key形成set集合
Set set = map.keySet();
System.out.println(set);
//map集合的遍历,
//方式1:keySet():把map中的可以放入set集合
//遍历方式1:keySet ()
Set set2 = map.keySet();
Iterator it = set2.iterator();
while (it.hasNext()){
String key = (String) it.next();
String val = (String) map.get(key);
System.out.println(key+"="+val);
}
//遍历方式2:entrySet()
Set set1 = map.entrySet();
Iterator it2 = set1.iterator();
while (it2.hasNext()){
Map.Entry en = (Map.Entry) it2.next();
String key = (String) en.getKey();
String value = (String) en.getValue();
System.out.println(key+"=="+value);
}
}
}
4.HashMap
HashMap的键要同时重写hashCode()和equals()
hashCode()用来判断确定hash值是否相同
equals()用来判断属性的值是否相同
– equals()判断数据如果相等,hashCode()必须相同
– equals()判断数据如果不等,hashCode()尽量不同
4.1 概述
基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键
HashMap底层是一个Entry数组,当存放数据时会根据hash算法计算数据的存放位置。算法:hash(key)%n,n就是数组的长度
当计算的位置没有数据时,就直接存放,当计算的位置有数据时也就是发生hash冲突的时候/hash碰撞时,采用链表的方式来解决的,在对应的数组位置存放链表的头结点。对链表而言,新加入的节点会从头结点加入
4.2 练习:读取HashMap的数据
package cn.tedu.map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Test4_Map {
public static void main(String[] args) {
HashMap map = new HashMap();
map.put(100, "刘德华");
map.put(101, "梁朝伟");
map.put(102, "古天乐");
map.put(103, "周润发");
//遍历方式1:keySet()
Set set = map.keySet();
Iterator it = set.iterator();
while (it.hasNext()){
String key = (String) it.next();
String val = (String) map.get(key);
System.out.println(key+"="+val);
}
//遍历方式2:entrySet()
Set set2 = map.entrySet();
Iterator it2 = set2.iterator();
while (it2.hasNext()){
Map.Entry en = (Map.Entry) it2.next();
String key = (String) en.getKey();
String value = (String) en.getValue();
System.out.println(key+"=="+value);
}
}
}
4.3 练习:字符串中的字符统计
接收用户输入的一串字符串,统计出现的每个字符的个数
package cn.tedu.map;
import java.util.HashMap;
import java.util.Scanner;
public class Test5_Map {
public static void main(String[] args) {
System.out.println("请输入字符");
String s = new Scanner(System.in).nextLine();
HashMap<Character,Integer> map = new HashMap<>();
//遍历字符串获取每个字符
for(int i=0;i<s.length();i++){
//取出字符串中的每个字符
char c = s.charAt(i);
//拿着字符查个数
Integer count = map.get(c);
//如果取出来是null,就存1
if(count==null){
map.put(c,1);
}else {
//如果取出来有值,计数加1
map.put(c,count+1);
}
}
System.out.println(map);
}
}
5.Collections工具类
5.1 常用方法
Collections.sort(List<> list):根据元素的自然顺序 对指定列表按升序进行排序
Collections.max():根据元素的自然顺序,返回给定 collection 的最大元素
Collections.min():根据元素的自然顺序 返回给定 collection 的最小元素
Collections.swap(List,i,j):在指定列表的指定位置处交换元素
Collections.addAll()
5.2 测试
package cn.tedu.collections;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Test6_Collections {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
//添加多个元素
Collections.addAll(list, "3","30","23","15","29","12","26");
//元素排序
Collections.sort(list);
//默认是字符顺序:[12,15,23,26,29, 3, 30]
System.out.println(list);
//自己定义比较方式
Collections.sort(list,new Comparator<String>(){
//自定义比较器,sort()自动调用
@Override
public int compare(String o1, String o2) {
//把字符串转成int比大小
int a = Integer.parseInt(o1);
int b = Integer.parseInt(o2);
//o1大是正数,o1小是负数,相等是0
return a-b;
}
});
System.out.println(list);
}
}