Java集合——List接口、Set接口和Map接口

目录

前言

List接口

ArrayList类和LinkedList类

列表的使用实例

向量

向量使用的实例

堆栈和队列

堆栈和队列的使用实例

Set接口

set接口的使用实例

Map接口

Map接口的使用实例

最后


前言

上篇文章我们学习了Java集合——Collection接口、增强for循环、迭代器和泛型的相关知识,简单了解了集合体系(如下图)

DSFSAFA

今天我们开始学习List接口、Set接口和Map接口相关的知识。

List接口

list接口类似于数学上的数列模型,也称序列。其特点是可汗重复元素,而且是有序的,用户可以控制向序列中某位置插入元素,并可按元素的顺序访问他们。

注意:元素顺序是从零开始,最后一个元素为:list.size()-1。

其中elem代表数据对象,pos代表操作位置,start_pos为起始查找位置。

方法功能
.add(elem)在尾部添加元素
.add(int pos, elem)在指定位置增加元素
.get(int pos)获取指定位置元素
.set(int pos ,elem)修改指定位置元素
.remove(int pos)删除指定位置元素
.indexOf(Object obj)从开始往后查找元素位置
.indexOf(Object obj , int start_pos)从某位置开始往后查找元素位置
.lastIndexOf(Object obj)从尾往后查找元素位置
.lastIndexOf(Object obj, int start_pos)从某位置开始由尾往前查找元素位置
ListIterator<E> listIterator()返回列表的ListIterator对象

ArrayList类和LinkedList类

ArrayList类内部使用数组存放元素,实现了可变大小的数组。

特点:访问元素效率高,但插入元素效率低。

LinkedList类内部使用双向链表存储元素。

特点:插入元素效率高,但访问元素效率低,区分列表的头位置和尾位置的概念,提供了在头尾增、删和访问元素的方法。

  • 需要快速插入,删除元素,应该使用LinkedList类;
  • 需要快速随机访问元素,应该使用ArrayList类。

列表的使用实例

import java.lang.reflect.Array;
import java.util.*;
public class first {
	public static void main(String[] args) {
		ArrayList<Integer> a=new ArrayList<>();     //创建ArrayList类集合对象
		a.add(12);                                  //添加元素
		a.add(15);
		a.add(23);
		System.out.println(a);
		System.out.println(a.indexOf(12));          //输出元素12的位置
		Double x[]= {1.2,2.5,7.3};
		List<Double> b=Arrays.asList(x);            //数组转换为列表
		System.out.println(b);
	}
}

运行结果为:

[12, 15, 23]
0
[1.2, 2.5, 7.3]

注意:ArrayList加入的数据类型通常要与参数类型一致或者能进行转换赋值。

向量

向量(Vector)是List接口中的另一个子类,Vector和ArrayList非常相似。Vector是线程同步的,线程在更改向量的过程中对资源加锁,而ArrayList不存在此问题。Vector实现了可变大小的对象数组,在容量不够时会自动增加。

  • size()方法可获取向量的大小;
  • ’capacity()方法则用来获取向量的容量;
  • insertElementAt( )在指定位置增加元素;
  • elementAt()获取指定位置元素。

向量使用的实例

import java.util.*;
public class first {
	public static void main(String[] args) {
		Vector<Integer> v=new Vector<>(20,30);        //创建向量集合并当向量为空时,向量容量为20
		System.out.println("向量的大小为:"+v.size());    //输出向量集合的大小
		System.out.println("向量的容量为:"+v.capacity());//输出向量集合的容量
		for(int i=0;i<24;i++)                            //使用for循环向向量增加元素
			v.add(i);
		System.out.println("元素增加后:");
		System.out.println("向量的大小为:"+v.size());
		System.out.println("向量的容量为:"+v.capacity());
	}
}

运行结果为:

向量的大小为:0
向量的容量为:20
元素增加后:
向量的大小为:24
向量的容量为:50

堆栈和队列

堆栈(stack)是后进先出的数据结构,新进栈的元素总在栈顶,而出栈时总是先去栈顶元素。

使用堆栈对象的push方法可将一个对象压进栈中,而用pop方法将弹出栈顶元素作为返回值,empty方法可判断是否为空。

队列(Queue)是先进先出的数据结构,可以高效地在一端(“队尾”)添加元素,而在另一端(“队头”)删除元素。

ArrayDeque作为队列使用时是用add和remove方法实现进队和出队操作。

ArrayDeque可以作为栈来使用,也可以作为队列使用。

堆栈和队列的使用实例

import java.util.*;
public class first {
	public static void main(String[] args) {
		ArrayDeque<String> stack=new ArrayDeque<>();    //创建栈集合
		stack.push("虞姬");                             //添加栈元素
		stack.push("狄仁杰");
		stack.push("诸葛亮");
		System.out.print("出栈的顺序为:");
		while(!stack.isEmpty())                        //判断是否为空栈
			System.out.print(stack.pop()+" ");         //输出弹出的栈顶元素
		System.out.println();
		Queue<String> queue=new ArrayDeque<>();        //创建队列集合
		queue.add("苹果");                              //添加队列元素
		queue.add("西瓜");
		queue.add("香蕉");
		System.out.print("出队的顺序为:");
		while(!queue.isEmpty())                        //判断是否为空队列
			System.out.print(queue.remove()+" ");      //输出出队元素顺序  
	}
}

运行结果为:

出栈的顺序为:诸葛亮 狄仁杰 虞姬 
出队的顺序为:苹果 西瓜 香蕉 

Set接口

set接口是数学上集合模型的抽象,特点是它不含重复元素,而且是无序的。HashSet是Set接口的典型实现类,它使用哈希表来实现底层存储。

  • add(Object)方法不能插入已经在集合的元素;
  • addAll(Collection c)将当前集合与收集c的集合进行合并运算;
  • e1.equals(e2)按对象值比较。

set接口的使用实例

import java.util.*;
public class first {
	public static void main(String[] args) {
		Set<String> h=new HashSet<>();        //创建Set接口的集合对象
		h.add("stack");                       //添加h集合元素
		h.add("Queue");
		h.add("stack");
		System.out.print(h);                  //输出集合元素
	}
}

运行结果为:

[stack, Queue]

Map接口

Map是一个散列表,它存储的内容是键值对(key-value)映射。

  • Set<K> keySet():键的集合;
  • Collection<V>values():值的集合;
  • Set<Map.Entry<K,V>>entrySet():键值对的映射关系的集合;

对Map接口数据集合的操作方法:

方法描述
.clear()清空整个数据集合
 .get(K key)根据键得到对应值
.put(K key,V value)加入新的“键值对”
.remove(Object key)删除Map中键所对应的映射关系
.equals(Object obj)判断Map对象与参数对象是否等价
.containsKey(Object key)判断Map中是否有与键匹配的项
.containsValues(Object value)判断Map中是否有与值匹配的项

Map接口的使用实例

import java.util.*;
public class first {
	public static void main(String[] args) {
		Map<Long,String> m=new HashMap<>();     //创建Map接口集合对象
		m.put(201L, "狄仁杰");                   //添加元素键值对
		m.put(202L,"虞姬");
		m.put(203L, "诸葛亮");
		Set<Long> keys=m.keySet();              //通过Map对象的keySet()方法得到键的集合
		for(Iterator<Long> i=keys.iterator();i.hasNext();)
			System.out.print(i.next()+" ");     //输出集合的所有元素
		System.out.println();
		System.out.println(m.get(202L));        //获取202L对应的值
		System.out.println(m.values());         //输出集合对象的所有值
	}
}

运行结果为:

201 202 203 
虞姬
[狄仁杰, 虞姬, 诸葛亮]

最后

好了,关于Java集合——List接口、Set接口和Map接口的知识学到这里了,谢谢观看!!!

我们下篇文章再见!!!

成功不是将来才有的,而是从决定去做的那一刻起,持续累积而成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

白巧克力LIN

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

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

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

打赏作者

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

抵扣说明:

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

余额充值