JAVA集合之Map集合,Set集合,List集合
1.集合和数组的区别?
1.数组的长度是固定的,集合的大小是可动态变化的。
2.数组存储的元素可以是基本类型和引用类型,集合存储的元素只能是引用类型。
2.集合
集合类包括Set、List、Map集合,其中Set和List继承了Collection接口。Set不能包含重复的元素。List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。Map是Java.util包中的另一个接口,它和Collection接口相互独立,它包含了key-value对,其中key不能重复。所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口。
3.Map集合
Map接口提供了key到value的映射关系,其中key不能重复,并且每个key只能映射到一个value。
(1)HashMap
不能保证映射的顺序,允许null作为key和value,key不可以重复,value允许重复。适用于在Map中插入、删除和定位元素。
(2)Treemap
还实现了SortedMap接口,key不可以重复,也不允许为null ,value允许重复。适用于按自然顺序或自定义顺序遍历键(key)。
(3)Map接口常用的一些方法:
size() 获取集合中名值对的数量
put(key k, value v ) 添加元素
get( k ) 获取键对应的值
remove( key)键对应的元素
clear()清空
contains(key) 查询集合中是否包含某个K
contains(value) 查询集合中是否包含某个value值
keySet()获取所有的键
values()获取所有的value值
(4)HashMap示例代码:
package com.map.demo;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
public class MapTest {
public static void main(String[] args) {
//Map接口中键和值一一映射. 可以通过键来获取值。
Map<String,String> mp=new HashMap<>();
mp.put("sw1", "demo1");
mp.put("sw2", "demo2");
/*第1种
keySet的返回值是键的Set集合
通过Map.keySet遍历key和value:
*/
for(String ks :mp.keySet()) {
System.out.println("key= "+ ks + " and value= " + mp.get(ks));
}
//通过Map.keySet使用iterator遍历key和value:
Iterator<String> k=mp.keySet().iterator();
while (k.hasNext()) {
String key = (String) k.next();
System.out.println(key);
}
System.out.println("-----------分界线--------------");
/*第2种
通过Map.entrySet使用iterator遍历key和value:
entrySet()的返回值是一个Set集合,此集合的类型为Map.Entry。
Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry<K,V>。
*/
Iterator<Entry<String, String>> it=mp.entrySet().iterator();
while(it.hasNext()) {
Map.Entry<String,String> entry=it.next();
String key=entry.getKey();
String value=entry.getValue();
System.out.println(key+":"+value);
}
}
}
4.Set集合
Set集合中的元素不按特定的方式排序,只是简单的被存放在集合中,Set集合中的元素不能重复。
(1)HashSet
不允许出现重复元素,不保证集合中元素的顺序,允许包含值为null的元素,但最多只能有一个null元素。
(2)TreeSet
不允许出现重复元素,不允许包含值为null的元素。它还实现了SortedSet接口,因此它会默认将元素按升序排列。
(3)Set集合常用的一些方法:
size() 获取元素数量
add(obj)添加元素
clear() 清空
remove(obj)删除指定对象
contatins(obj)查询,如果集合中含有该元素则返回true
(4)HashSet示例代码
package com.map.demo;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class SetTest {
public static void main(String[] args) {
Set<String> st=new HashSet<>();
st.add("33");
st.add("12");
st.add("23");
st.add("12");
Iterator<String> it=st.iterator();
while(it.hasNext()){
String str=it.next();
System.out.println(str);
}
}
}
运行结果:
(5)TreeSet示例代码
package com.map.demo;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class SetTest {
public static void main(String[] args) {
Set<String> st=new TreeSet<>();
st.add("33");
st.add("12");
st.add("23");
st.add("12");
Iterator<String> it=st.iterator();
while(it.hasNext()){
String str=it.next();
System.out.println(str);
}
}
}
运行结果:
5.List集合
List是一个有序的集合,各元素的顺序就是添加元素的顺序,可以包含重复的元素,提供了按索引访问的方式。
(1)ArrayList
以数组的形式保存集合中的元素,按照添加的先后顺序排列,能够根据索引位置随机且快速的访问集合中的元素。
(2)LinkedList
以链表结构保存集合中的元素,按照插入的先后顺序排序,不提供sort方法对内部元素排序。随机访问集合中元素的性能比较差,但向集合中插入元素和删除元素的性能出色。
(3)List合集常用的一些方法:
size()获取元素数量
add(obj)添加元素
get(int index)获取指定索引的元素
set(int index,Object obj) 将集合中指定索引位置的对象修改为指定的对象
remove(int index)移除指定索引位置的元素
remove(obj)移除指定元素
clear()清空
contains(obj)查询,若集合中有该元素,则返回true
(4)ArrayList示例代码
package com.map.demo;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ListTest {
public static void main(String[] args) {
List<String> l=new ArrayList<String>();
l.add("33");
l.add("12");
l.add("23");
l.add("12");
l.add(1, "666"); //在指定位置插入元素
Iterator<String> it=l.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
运行结果:
6.集合的使用场景
List集合关注的是索引,元素有存放顺序。
Set集合关注的是唯一性,它的值不允许重复。
Map集合关注的是唯一的标识符key,映射到某一个元素。
7.温馨提示
需要注意集合的元素数量是可以变化的,以下代码的输出会是什么?
代码:
package com.map.demo;
import java.util.ArrayList;
import java.util.List;
public class UseCon {
public static void ListTest() {
List<Integer> l=new ArrayList<>();
l.add(1);
l.add(2);
l.add(3);
l.add(4);
for (int i = 0; i < l.size(); i++) {
System.out.print(l.get(i)+"\t");
l.remove(i);
}
}
public static void main(String[] args) {
ListTest();
}
}
运行结果: