JAVA集合之Map集合,Set集合,List集合

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();
		
	}
}

运行结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

午夜安全

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值