d11
==和equals区别
1.==
判断对象是否是同一个,地址是否相同
2.euqals
判断对象的内容是否相同,默认调用object的equals()方法,而该方法仍然判断的是地址是否相同
3.如果没有重写equals的方法,和==效果一样
Set 集合
- 不能重复
- 无序
- add
- HashSet的内部实现是通过HashMap实现的
========================
Map 映射
- 1.映射
- Key - value 对,称为Entry
- map的size就是entry的数量
- Map接口是单独的接口,没有继承任何接口(与1.5之前的jdk版本不同)
- put(Key)放入元素
将key 和 value 进行关联,
- get(Key)提取元素
- 迭代 entry keyset
- remove(key)
- HashMap.hash()方法意义:将新的hash值与更多的特征值相关
Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry<K,V>。
它表示Map中的一个实体(一个key-value对)。接口中有getKey(),getValue方法。
public class MapDemo {
public static void main(String[] args) {
Map<Integer,String> map = new HashMap<Integer, String>();
map.put(100,"tom100");
map.put(100,"tom200");
map.put(300,"tom300");
map.put(400,"tom400");
System.out.println(map.size());
System.out.println(map.values());
}
//迭代
Set<Map.Entry<Integer,String>> entries = map.entrySet();
//增强for循环
for(Map.Entry<Integer,String> entry : entries){
Integer key = entry.getKey();
String value = entry.getValue();
System.out.println(key + "+" + value);
}
System.out.println("====================================");
//通过key迭代
Set<Integer> keys = map.keySet();
for(Integer key : keys){
System.out.println(key + "===" + map.get(key));
}
}
}
map.remove(100);
Hash
Class HashMap
static final int hash(Object var0) {
int var1;
return var0 == null ? 0 : (var1 = var0.hashCode()) ^ var1 >>> 16;
}
Hash:目的 把对象打撒,让其在空间内均匀分部
对旧的Hash打乱产生新的Hash
HashSet
线程不安全
存取速度快
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class SetDemo {
public static void main(String[] args) {
//hash:散列 去重
Set<String> set = new HashSet<String>();
set.add("tom");
set.add("jerry");
set.add("kingkong");
set.add("haha");
set.add("hehe");
set.add("heihei");
System.out.println(set.size());
for(Iterator<String> it = set.iterator(); it.hasNext();){
System.out.println(it.next());
}
}
}
元素重复的判断标准
p.hash == hash && ((k = p.key) == key || (key != null && key.equals(k)))
a.new hash不同,对象不同
b.new hash 相同,对象是同一对象
c.new hash 相同 对象不是同一个对象,则判断equals方法,则对象相同性判断和equals一致
接口中常用的类
Vector
线程安全,但速度慢,已经被ArrayList替代
ArrayList
线程不安全,查询素速度快
LinkedList
链表结构,增删速度快
取出List集合中的元素的方式:
get(int index):通过脚标获取元素
iterator():通过迭代方法获取迭代器对象
==========================
HashSet:通过HashCode()方法 == 和equals方法保证元素是否相同
TreeSet:通过compareTo或者compare方法中的 元素唯一,元素是二叉树的形放的
==========================
Map
- map与collection在集合框架中属于并存
- map存储是键值对
- map存储元素使用put方法,Collection使用add方法
- Map集合没有直接取出元素的方法.而是先转成set结合,再通过迭代获取
- map集合中键要保证唯一性