Map与Set

2018-12-19  本文已影响0人  啦啦啦_9a5f

一、Set接口的特点

使用HashSet存储字符串并遍历

Set<String> set = new HashSet<String>();//父接口引用指向子类对象

//添加元素对象

set.add("hello");

set.add("world");

set.add("java");

//遍历集合对象

//Colleaction三种:转数组、迭代器、foreach,List有四种,由于List是有序的,多了一种索引,Set也是三种,Set没有索引

1.转数组

Object[] obj = set.toArray();
for(int i = 0;i < obj.length;i++){
  System.out.println(obj[i]);
}

2.迭代器

Iterator<String> it = set.iterator();
while(it.hasNext()){
  String s = it.next();
  System.out.println(s);
}

3. 增强for

for(String s : set){
  System.out.println(s);
}

4.Set集合的特点:

(1)无序(存储和读取的顺序有可能不一样)

(2)不允许重复(要求元素唯一)

(3)没有索引,因为没有顺序

5.HashSet中add()方法不能去重的原因:

HashSet()的add()方法,首先会使用当前集合中的每个元素和新添加的元素进行hash值比较

如果hash值不一样,直接添加新的元素

如果hash值一样,比价地址值或者使用equals方法进行比较

比较结果一样,则认为是重复不添加

送油的比较结果不一样则添加。

由于创建自定义对象时,传的参数是地址值,每个地址值都不同,即使对象的属性一致,也会添加进LinkedList

6.重写hashCode()和equals()方法实现HashSet存储自定义对象去重

(1)根据新添加的元素的hashCode()返回值计算出hash值

(2)先比较hash值,hash值不一样if语句结束

(3)如果hash值一样,则比较地址或者使用equals方法进行比较

(4)由此可以看出先重写hashCode()使hash值一致,在重写equals()比较对象中属性值。

二、Collections

1.面试题:Collection和Collections的区别:

(1)Collection是集合体系的最顶层,包含了集合体系的共性

(2)Collections是一个工具类方法都是用于操作Collection

2.Collections的常用方法

(1)static int binarySearch(List list, Object key)//使用二分查找指定元素在指定列表的索引位置,List是有序的

List<Integer> list = new ArrayList<Integer>();
list.add(1);//JDK1.5特性自动装箱
list.add(2);
list.add(3);
list.add(4);
int index = Colleaction.binarySearch(list,4);

(2)static void copy(List dest, List src):把源列表的数据覆盖到目标列表

List<String> src = new ArrayList<String>();
src.add("hello");
src.add("world");
src.add("java");
List<String> dest = new ArrayList<String>();
dest.add("");
dest.add("");
dest.add("");
Collections.copy(dest,src);

注意:目标列表的长度至少等于源列表的长度

(3)static void fill(List list, Object obj):使用指定对象填充指定列表的所有元素

List<String> list = new ArrayList<String>();
list.add("hello");
list.add("world");
list.add("java");
Colleactions.fill(list,"android");

(4)static void reverse(List list)

List<String> list = new ArrayList<String>();
list.add("hello");
list.add("world");
list.add("java");
Colleactions.reverse(list);

(5)static void shuffle(List list):使用指定的随机源对指定列表进行置换

(6)static void sort(List list):根据元素的自然顺序对指定列表按升序进行排序。

(7)static void swap(List list, int i, int j):在指定列表的指定位置处交换元素。

三、Map接口

为了提现有对应关系的数据,Java提供了一种专门用于存储对应关系的集合。

Map<K,V>:将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值

1.Map和Collection 的区别

Map:是一个双列集合,常用语处理有对应关系的数据,key是不可以重复的,称之为夫妻集合

Colleaction:是单列集合,Collection有不同的字体系,有的允许重复有索引有序,有的不允许重复且无序,称之为单身汉集合

2.Map的常用功能:

Map<String,String> map = new HashMap<String,String>();

(1)映射功能:

V put (K key,V value)//就是将key映射到value,如果key存在,则覆盖value,并将原来的value返回

System.out.println(map.put("001","zhangsan"));
System.out.println(map.put("001","wangwu"));
输出:null  zhangsan

(2)获取功能:

V get(Object key)

Set<K> keySet()

Collection<V> values()

int size()

System.out.println(map.size());//返回对应关系的个数
输出结果:2
System.out.println(map.get("001"));//根据指定的key返回对应的value
map.put("001","zhangsan");
map.put("002","lisi");
(map.put("003","wangwu"));
Set<String> keys = map.keySet();
for(String key : keys){
  System.out.println(key);
}
输出结果:001
              002
              003
map.put("001","zhangsan");
map.put("002","lisi");
(map.put("003","lisi"));
Colleaction<String> values = map.values();
for(String value : values){
  System.out.println(value);
}
输出结果:zhangsan
              lisi
              lisi

(3)判断功能

boolean containsKey(Object key)

boolean containsValue(Object value)

boolean isEmpty()

System.out.println(map.containsKey("001"));
输出结果:true
System.out.println(map.containsVaule("zhangsan"));
输出结果:false
System.out.println(map.isEmpty());
输出结果:false

(4)删除功能

void clear()

v remove(Object key)

map.clear();//清空所有的对应关系
System.out.println(map.remove("001"));//根据指定的key删除对应关系,并返回key所对应的值,如果没有删除成功返回null
输出结果:wangwu

(4)遍历功能:

Map的第一种遍历方式:

先找到所有的key,遍历所有的key,获取每一个key,去找key对应的value

map.put("001","zhangsan");
map.put("002","lisi");
(map.put("003","wangwu"));
Set<String> keys = map.keySet();
for(String key : keys){
  String value = map.get(key);
}

Map的第二种遍历方式:

Set<Map.Entry<K,V>> entrySet()

Entry是Map中的内部类

Set<Map.Entry<String,String>> entrys = map.entrySet();
for(Map.Entry<String,String> entry: entrys){
String key = entry.getKey(); 
String value = entry.getValue();
}
上一篇下一篇

猜你喜欢

热点阅读