List和Set集合使用

Java提供的众多集合类由两大接口衍生而来:单列集合Collection和双列集合Map

Collection接口

Collection接口是所有单列集合的父接口 ,每次储存一个元素,接口的主要方法包括:

  • public boolean add(E e) : 把给定的对象添加到当前集合中 。
  • public  void clear() :清空集合中所有的元素。
  • public boolean remove(E e) : 把给定的对象在当前集合中删除。
  • public boolean contains(E e) : 判断当前集合中是否包含给定的对象。
  • public boolean isEmpty( ): 判断当前集合是否为空。
  • public int size() :返回集合中元素的个数。 
  • public Object[] toArray() : 把集合中的元素,存储到数组中。

方法演示如下:

import java.util.ArrayList;
import java.util.Collection;public class Demo1Collection {public static void main(String[] args) {// 创建集合对象 // 使用多态形式Collection<String> coll = new ArrayList<String>();// 使用方法// 添加功能  boolean  add(String s)coll.add("小李广");coll.add("扫地僧");coll.add("石破天");System.out.println(coll);// boolean contains(E e) 判断o是否在集合中存在System.out.println("判断  扫地僧 是否在集合中"+coll.contains("扫地僧"));//boolean remove(E e) 删除在集合中的o元素System.out.println("删除石破天:"+coll.remove("石破天"));System.out.println("操作之后集合中元素:"+coll);// size() 集合中有几个元素System.out.println("集合中有"+coll.size()+"个元素");// Object[] toArray()转换成一个Object数组Object[] objects = coll.toArray();// 遍历数组for (int i = 0; i < objects.length; i++) {System.out.println(objects[i]);}// void  clear() 清空集合coll.clear();System.out.println("集合中内容为:"+coll);// boolean  isEmpty()  判断是否为空System.out.println(coll.isEmpty());  	}
}

且collection有两个重要的子接口,分别是Set和List。其中,List的特点是元素有序、元素可重复。Set的特点是元素无序,而且不可重复。List接口的主要实现类有java.util.Arraylist和java.util.Linkedlist,Set接口的主要实现类有java.util.HashSet、java.util.LinkedHashSet和java.util.TreeSet。

List集合

List作为Collection集合的子接口,用于定义以列表形式存储的集合,List接口为集合中的每个对象分配了一个索引(index),标记该对象在List中的位置,并可以通过index定位到指定位置的对象。List在Collection基础上增加的主要方法包括:

  • public void add(): 将指定的元素,添加到该集合中的指定位置上。
  • public E get(int index):返回集合中指定位置的元素。
  • public E remove(int index): 移除列表中指定位置的元素, 返回的是被移除的元素。
  • public E set(int index,E element):用指定元素替换集合中指定位置的元素,返回值是更新前的元素。

List接口的常用实现类:

ArrayList

ArrayList基于数组来实现集合的功能,其内部维护了一个可变长的对象数组,集合内所有对象存储于这个数组中,并实现该数组长度的动态伸缩

ArrayList使用数组拷贝来实现指定位置的插入和删除:

插入:

删除:

LinkedList

LinkedList基于链表来实现集合的功能,其实现了静态类Node,集合中的每个对象都由一个Node保存,每个Node都拥有到自己的前一个和后一个Node的引用

LinkedList追加元素的过程示例:

 

ArrayList 和 LinkedList区别:

  1. ArrayList的随机访问更高,基于数组实现的ArrayList可直接定位到目标对象,而LinkedList需要从头Node或尾Node开始向后/向前遍历若干次才能定位到目标对象
  2. LinkedList在头/尾节点执行插入/删除操作的效率比ArrayList要高
  3. 由于ArrayList每次扩容的容量是当前的1.5倍,所以LinkedList所占的内存空间要更小一些
  4. 二者的遍历效率接近,但需要注意,遍历LinkedList时应用iterator方式,不要用get(int)方式,否则效率会很低

Vector

Vector和ArrayList很像,都是基于数组实现的集合,它和ArrayList的主要区别在于

  • Vector是线程安全的,而ArrayList不是
  • 由于Vector中的方法基本都是synchronized的,其性能低于ArrayList
  • Vector可以定义数组长度扩容的因子,ArrayList不能

Set集合

Set接口和List接口一样,同样继承自Collection接口,它与Collection接口中的方法基本一致,并没有对Collection接口进行功能上的扩充,只是比Collection接口更加严格了。与List接口不同的是,Set接口中元素无序,并且都会以某种规则保证存入的元素不出现重复。 

Set接口的常用实现类:

HashSet

HashSet是Set接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的(即存取顺序不一致) 。

HashSet是根据对象的哈希值来确定元素在集合中的存储位置,因此具有良好的存取和查找性能。保证元素唯一性的方式依赖于:hashcode与equals方法。所以,给HashSet中存放自定义类型元素时,需要重写对象中的hashCode和equals方法,建立自己的比较方式,才能保证HashSet集合中的对象唯一 。

LinkedHashSet

我们知道HashSet保证元素唯一,可是元素存放进去是没有顺序的,那么我们要保证有序,怎么办呢?

在HashSet下面有一个子类java.util.LinkedHashSet,它是链表和哈希表组合的一个数据存储结构,能够保证顺序的有效输出。

演示代码如下:

public class LinkedHashSetDemo {public static void main(String[] args) {Set<String> set = new LinkedHashSet<String>();set.add("bbb");set.add("aaa");set.add("abc");set.add("bbc");Iterator<String> it = set.iterator();while (it.hasNext()) {System.out.println(it.next());}}
}

结果:
  bbb
  aaa
  abc
  bbc

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/498125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Andrej Karpathy发文谈神经网络后,引发的对硬件,软件和学件的思考

作者&#xff1a;岑峰 概要&#xff1a;近日&#xff0c;Tesla AI总监Andrej Karpathy发表了一篇关于“Software 2.0”的文章&#xff0c;该文章引发了对未来神经网络的编程方式的更深入探讨&#xff0c;本文就是其中之一。 近日&#xff0c;Tesla AI总监Andrej Karpathy发表了…

异常与断言

1、接口方法声明异常与实现类方法声明异常的关系 2、异常链——示例 3、try-catch-finally 推荐组织结构&#xff0c;及其缺陷 4、断言 ----------------------------------------------------------------------------------------------- 1、接口方法声明异常与实现类方法…

2019年《自然》迎新子刊:机器智能、新陈代谢和综述物理

来源&#xff1a;Nature自然科研微信公众号 概要&#xff1a;过去十年&#xff0c;人工智能和机器人学背后的技术已取得巨大飞跃&#xff0c;并带来各种精彩应用&#xff0c;如无人驾驶汽车、人工智能引导的医学诊断、智能数字家庭助手等。 《自然-机器智能》将发表和报道人工智…

未来货运:无人驾驶技术和卡车司机如何配合?

来源&#xff1a;厚势 概要&#xff1a;看看你的周围。你看到的几乎所有东西都经过了卡车运输&#xff0c;无论是咖啡豆&#xff0c;还是你在使用的手机。 特斯拉刚刚发布了电动卡车&#xff0c;其实很多公司都对这一运输工具都在研究革新。Uber 本周&#xff08;17.11.18&…

bat脚本如何自动输入y_在Mac如何写一个相对自动的翻译脚本

近来使用的google翻译的插件有些不稳定&#xff0c; 时灵时不灵的&#xff0c;无奈的使用百度翻译了&#xff0c; 感觉体验也不好&#xff0c; 就想自己写一个翻译的脚本。整体思路简单&#xff0c; 就是调用百度翻译api再将结果呈现出来&#xff0c; 最后使用alias链接一下。大…

RefFieldMethodDetails——查看类的域和方法

RefFieldMethodDetails&#xff0c;通过反射机制查看类的域和方法&#xff08;包括编译器添加的“桥方法”&#xff09; public class RefFieldMethodDetails {/*** 打印出指定类的* 1、声明的所有构造方法&#xff08;包括私有&#xff09;* 2、声明的所有方法&#xff08;包括…

it 部门的建议_应对IT项目阻力的8个建议

点击上方“蓝色字体”&#xff0c;选择 “设为星标”关键讯息&#xff0c;D1时间送达&#xff01;大多数IT主管表示&#xff0c;有关抵触进行坦率的对话有助于产生新信息&#xff0c;从而最终推动项目向前发展。而且&#xff0c;在某些情况下&#xff0c;阻力是由于对需要进行路…

科学家首次在野外直接观察到雀类新物种的快速形成

来源&#xff1a;与峰同行博客 概要&#xff1a;新物种是怎么形成的&#xff1f;这是生物学上最根本的问题之一。大致听说过进化论的人可能都知道&#xff0c;地球上我们现在看到的各种各样的生物都是由最初的单细胞经过亿万年的进化而来的。 科学家首次在野外直接观察到雀类新…

查看某个分区之前所有的数据_腾讯大数据面试真题汇总

腾讯面试题学长11&#xff09;笔试部分&#xff08;1&#xff09;有一表名t_sh_mtt_netdisk_log&#xff0c;从表名可以看出该表是什么业务的&#xff0c;是什么周期粒度的表。&#xff08;2&#xff09;怎么查看表结构&#xff0c;表创建语句&#xff1f;怎么查看表有哪些分区…

全球16家超级独角兽公司,为什么中国能占7家,印度只有1家?未来哪些行业最可能诞生独角兽?

来源&#xff1a; 财看见-腾讯财经&#xff08;ID&#xff1a;qqckj2017&#xff09; 概要&#xff1a;对于创业公司来说&#xff0c;成为“独角兽”甚至是“超级独角兽”&#xff0c;就意味离成功只有几步之遥。 对于创业公司来说&#xff0c;成为“独角兽”甚至是“超级独角兽…

数据可视化--pyecharts绘图

pyecharts 是一个用于生成 Echarts 图表的类库。 Echarts 是百度开源的一个数据可视化 JS 库。主要用于数据可视化。 要使用pyecharts绘制地图&#xff0c;首先需要安装一下几个地图模块&#xff1a; 1、安装地图数据包&#xff0c;用于显示地图 pip install echarts-countri…

echart x轴标签偏移_1文搞懂真正的五轴加工中心,到底说的5轴是哪几个轴

随着国内数控技术的日渐成熟&#xff0c;近年来五轴联动数控加工中心在各领域得到了越来越广泛的应用。在实际应用中&#xff0c;每当人们碰见异形复杂零件高效、高质量加工难题时&#xff0c;五轴联动技术无疑是解决这类问题的重要手段。越来越多的厂家倾向于寻找五轴设备来满…

中国在国际上首次提出全液态量子器件与计算技术概念

来源&#xff1a;人民日报 概要&#xff1a;液态金属可以用来制造计算机核心电子元件&#xff0c;进而引发计算机的革命&#xff1f; 液态金属可以用来制造计算机核心电子元件&#xff0c;进而引发计算机的革命&#xff1f;不久前&#xff0c;我国一个研究小组发表了一项成果&…

如何使用frame框架,将左边视为导航栏,右边作为链接界面

在浏览网页时&#xff0c;我们经常会看到一个导航条&#xff0c;当点击导航条上的项目时&#xff0c;相应网页会在显示区域变换显示。那么如何将一个界面中&#xff0c;左边设置为导航栏&#xff0c;点击项目链接&#xff0c;则右边显示相应的内容呢&#xff1f;使用frameset框…

面对大规模AI集成,企业为何迟迟犹豫?

来源&#xff1a;亿欧 概要&#xff1a;首先&#xff0c;需要全面了解您的业务目标、技术需求以及AI对客户和员工的影响。需要解决的问题是&#xff0c;大多数员工面临着接受人工智能程度方面的挑战与担忧。 人工智能是实现流程自动化、降低运营成本和进创新的重要手段。尽管AI…

PostgreSQL+安装及常见问题

postgresql-8.1-int.msi postgresql-8.1.msi &#xff08;点这个安装&#xff09; 前面一直用默认 1、到如下画面时注意&#xff1a; 重复账户时&#xff0c;报如下错误&#xff1a; 2、勾选所有连接都能使用该PostgreSQL 数据库&#xff0c;而不是仅仅支持 Localhost 3、…

js 操作vuex数据_vue中使用vuex(超详细)

vuex是使用vue中必不可少的一部分,基于父子、兄弟组件,我们传值可能会很方便,但是如果是没有关联的组件之间要使用同一组数据,就显得很无能为力,那么vuex就很好的解决了我们这种问题,它相当于一个公共仓库,保存着所有组件都能共用的数据。 那么,我们一起来看看vue项目怎…

用脑科学支持人工智能

来源&#xff1a;中国科学报 概要&#xff1a;脑科学研究者正在揭示预测性运动控制神经机制&#xff0c;以脑科学基础研究支持人工智能发展并促进两大领域的深度融合。 最近&#xff0c;在国家自然科学基金&#xff08;项目号&#xff1a;31671075&#xff09;的支持下&#x…

mysql数据库进行更新、插入显示中文乱码问题

很多种情况下&#xff0c;从数据库中查询出来的内容中文显示正确&#xff0c;但是如果向数据库中插入或更新表时&#xff0c;会出现中文乱码问题&#xff0c;但英文显示正确&#xff0c;以下三种方式可以解决中文乱码问题。 1.数据库连接的配置文件中添加characterEncodingutf…