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

news/2024/7/19 12:41:59 标签: 列表, 队列, java

目录

前言

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类。

列表的使用实例

java">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);
	}
}

运行结果为:

java">[12, 15, 23]
0
[1.2, 2.5, 7.3]

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

向量

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

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

向量使用的实例

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

运行结果为:

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

堆栈和队列

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

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

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

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

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

堆栈和队列的使用实例

java">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接口的使用实例

java">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);                  //输出集合元素
	}
}

运行结果为:

java">[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接口的使用实例

java">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());         //输出集合对象的所有值
	}
}

运行结果为:

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

最后

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

我们下篇文章再见!!!

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


http://www.niftyadmin.cn/n/1158287.html

相关文章

getline与get函数的区别

get&#xff08;&#xff09;函数相对getline来说使用方法要灵活的多了。 1. int get()是指从流中抽取单个字符并返回&#xff0c;这个是没有參数的形式。由于c不像c语言使用getchar&#xff08;&#xff09; 2.istream &get(char*,int ,char)是指从流中抽取字符直到终止…

python中的numpy模块下载_python中numpy模块下的np.clip的用法

Numpy 中clip函数的使用numpy.clip(a, a_min, a_max, outNone)Clip (limit) the values in an array.Given an interval, values outside the interval are clipped to the interval edges. For example, if an interval of [0, 1] is specified, values smaller than 0 become…

Java事件

目录 前言 事件 事件处理 事件处理流程 给事件源对象注册监听者 给监听者编写事件处理代码 发生事件时调用监听者的方法进行相关处理 事件监听者接口及其方法 在事件处理代码中区分事件源和使用适配器 区分事件源 使用事件适配器类 最后 前言 在Java的图形界面开发…

Linux下Oracle的启动和关闭

默认情况下&#xff0c;Linux下Oracle是不会随系统自动启动的。 1.启动Oracle 1.以oracle账户登录到CentOS&#xff0c;或者切换到oracle用户权限 # su – oracle 2.然后输入&#xff1a; $ sqlplus "/as sysdba" 3.原本的画面会变为    SQL> 4.最后输入staru…

python中文版_太赞了:完全开源!Python进阶中文版开放下载了!

推荐一本有趣的Python书籍《Python进阶》&#xff0c;是《Intermediate Python》的中文译本&#xff0c;IntermediatePython这本书具有如下几个优点&#xff1a;简单、易读、易译。这些都不是重点&#xff0c;重点是&#xff1a;它是一本开脑洞的书。无论你是Python初学者&…

Java容器与布局管理

目录 前言 容器布局管理 默认布局管理器 取消布局管理器 FlowLayout(流式布局) FlowLayout(流式布局)示例 BorderLayout&#xff08;边缘或方位布局&#xff09; BorderLayout&#xff08;边缘或方位布局&#xff09;示例 GridLayout&#xff08;网格布局&#xff09;…

mac charles抓包

Mac上的抓包工具Charles $*********************************************************************************************$ 博主推荐&#xff1a; 风萧兮兮易水寒&#xff0c;“天真”一去兮不复还。如何找到天真的那份快乐。小编倾力推荐app: 天真无谐 下载方式&#xff1…

postman压力测试_如何用Postman做接口自动化测试

扫码加入千人跳槽求职QQ群&#xff0c;每日都有全国招聘信息哦前言什么是自动化测试把人对软件的测试行为转化为由机器执行测试行为的一种实践。例如GUI自动化测试&#xff0c;模拟人去操作软件界面&#xff0c;把人从简单重复的劳动中解放出来本质是用代码去测试另一段代码&am…