Java中几种列表的简单介绍_BestZhao的博客-程序员资料

技术标签: linkedlist  java基础  java  迭代器  arraylist  

java中列表的简单介绍与迭代器

Collection类中有多种容器类型:

  1. List 以特定的顺序保存元素
  2. Set 元素不能重复
  3. Queue 链表,只能从一端插入对象,从另一端取出 遵循先进先出原则
  4. Map 键值对插入

List中有两种类型的列表:

  • ArrayList:随机访问快,插入删除慢
  • LinkedList:插入删除快,但是随机访问慢。还添加了作为栈、队列、双端列表的方法,可以直接作为栈来使用,遵守“后进先出,先进后出”的原则,其中有几个常用方法:
    romove() romovefirst()返回列表头部并移除
    addfirst() add() addlast()插入到列表的尾部
    getfirst() element() peek()返回列表的头部

Set
Set具有与Collection完全一样的接口,因此没有额外的功能只是行为不同,不能保存重复的元素

  • HashSet 使用散列
  • TreeSet 将元素存储在红-黑树数据结构之中
  • LinkedHashSet 也使用了散列,但使用了链表来维护元素的插入顺序
    contains(元素)检查是否包含该元素
    三种列表都具有不同的元素存储方式

Map
采用键值对Key-Value的形式存储对象
- HashMap:是无序的,与放入的顺序无关
- LinkedHashMap:存入时会记录put的毫米数,遍历时按照存入的顺序输出

Map<K,V> map=new HashMap<K,V>();
map.put(k,v);
map.get(k)返回value

Map也可以扩展到多维

Map<K,List<?>> maps=new HashMap<K,List<?>>();

2在链表中添加元素的几个方法

1 Collections.addAll()接受多个参数,将之后的参数转化为数组存入第一个参数的序列中

2 在创建列表实例时,传入参数
可以使用Array.asList()将参数数组转化为列表list的形式,参数可以为数组或者逗号分割的元素列表

Collection<> collection=new ArrayList<>(Arrays.asList(1,2,3,4,5))//直接传入参数
Collections.addAll(collection,1,2,3,4,5,6)//参数转化为数组存入第一个参数的序列中
Collection.addAll(collection,moreInts)

3 foreach与迭代器Iterable

由于所有的Collection类型的对象都被强制要求implements Iterable 接口,故任何Collection对象都要能返回一个能遍历其的迭代器Iterator。

Collection<> collection=new ArrayList<>
Iterator<> it=collection.iterator()

迭代器的内部代码如下

Interface Iterator<E>{
boolean  hasNext() 
          Returns true if the iteration has more elements.

 E  next() 
          Returns the next element in the iteration.

void  remove() 
          Removes from the underlying collection the last element returned by the iterator (optional operation).
          }

iterator使用时通常都包含着这三个方法

Iteraotr it= arrayList.Iterator();
while(it.hasNext())
{
  print(it.next());
      it.remove();
}

foreach遍历,内部就使用了Iterable接口的iterater方法:

for(type var:coll()){body-of-loop; }
就等价于:
for(Iterator<type> iter=coll.iterator(); iter.hasNext();){
    type var=iter.next();
    body-of-loop;
}

所以所有实现了Iterable的类,都可以将他用于foreach语句中,比方说:

public class IterableClass implements Iterable<String>{
    protected String[] words=("And that is how "+
    "we know the earth to be banana-shaped.").split(" ")//以空格分割为数组的形式
    public Iterable<String> iterator(){
        return new Iterable<String>(){
            private int index=0;
            public boolean hasNext(){
                return index<words.length();
            }
            public String next(){
                return word[index++];
            }
            public remove(){}
        };
    }
    public static void main(String[] args){
        for(String s:new IterableClass())
            System.out.print(s+" ")
    }
}
Output: And that is how we know the earth to be banana-shaped.
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_37910658/article/details/73835078

智能推荐

loadView 和 viewDidLoad 区别_viewdidload什么意思_fallune1的博客-程序员资料

转载来自http://davychen.blog.51cto.com/3283671/653001 loadView 和 viewDidLoad 是 iPhone 开发中肯定要用到的两个方法。 他们都可以用来在视图载入的时候初始化一些内容。 但是他们有什么区别呢? viewDidLoad 方法只有当 view 从 nib 文件初始化的    loadView 和 viewD

Linux中ftok函数详解_一只青木呀的博客-程序员资料

在ipc通信中 system V 模式的ipc通信中都需要一个key值来生成对应的ID,那么key是如何生成的呢?通过函数ftok生成 #include &lt;sys/types.h&gt; #include &lt;sys/ipc.h&gt; key_t ftok(const char *pathname, int proj_id);参数:pathname: 传入一个路径(一般是当前路径“ . ”)proj_id : 随便填写一个数(要做通信

Compose搭档 — Flow、Room_room flow_乐翁龙的博客-程序员资料

文章目录Compose如虎添翼 -- 搭配Flow、Room!!!一、需求一览二、Compose UI开发三、Room集成及使用3.1、在使用kotlin编写的gradle脚本中集成3.2、使用方式3.2.1、数据库表(Table)3.2.2、数据访问对象(DAO-DataAccessObjects )3.2.3、数据库(Database)3.2.4、添加节气数据到数据库四、Compose + Flow五、小结Compose如虎添翼 – 搭配Flow、Room!!!Compose系列文章,请点原文阅读

[Python嗯~机器学习]---简述支持向量机(SVM)和核函数_鹏鹏哥哥的小红帽的博客-程序员资料

简述支持向量机这一个博客我们还是讨论监督学习和分类问题-----支持向量机 / SVM还是用问题引出我们的内容。我们在逻辑回归中通过对概率值的惩罚来判断决策边界,那么我我们在SVM中怎么分类?在线性不可分的高维度情况下,我们对样本进行分类?这样就引出了我们支持向量机中的最重要的两个内容1、顾名思义的支持向量(离决策边界最近的点)~~~2、引入核函数,使线性不可分的内容线性可分...

非同步DCDC的工作模式(CCM、DCM和BCM)_bcm模式_努力不期待的博客-程序员资料

目录1. 非同步DCDC的三种工作模式2. 如何从CCM切换到DCM?3. 电感电流交流纹波与电感值的关系?4. 电感饱和意味着什么?1. 非同步DCDC的三种工作模式非同步DCDC工作在哪种模式,取决于拓扑和输出功率,输入电压和输出电压的大小。CCM,连续导通模式,一个开关周期内电感电流>0。DCM,断续导通模式,一个开关周期内电感电流 ≥ 0。BCM,临界导...

Python基础----Socket编程规范及底层原理(一)_Lzs1998的博客-程序员资料

 今天先给大家讲讲什么是Socket,明白其底层实现原理是非常重要的,不明白底层的话写出来的代码会非常low,能否明白底层实现是正规军和杂牌军的重要区别之一,好了,不废话了,开始干!一.Socket1.为什么要socket?可能很多人都听说过C/S架构,即client/server架构(客户端/服务端架构),而C/S架构有硬件C/S架构(打印机),软件C/S架构(如百度网站就是服务...

随便推点

C/C++内存管理(4)_lien0906的博客-程序员资料

本文将对 Linux? 程序员可以使用的内存管理技术进行概述,虽然关注的重点是 C 语言,但同样也适用于其他语言。文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半手工地管理内存,以及如何使用垃圾收集自动管理内存。为什么必须管理内存内存管理是计算机编程最为基本的领域之一。在很多脚本语言中,您不必担心内存是如何管理的,这并不能使得内存管

CMake构建、编译OpenCV工程_cmake opencv 会构建子版本号_桔子code的博客-程序员资料

原文链接:http://www.juzicode.com/opencv-note-cmake-project-vs-windowsOpenCV除了提供二进制包,还可以下载其源码手动编译二进制文件,不过源码中并没有提供可以直接编译的工程文件,需要借助CMake工具完成工程文件的构建。获取源码从官网opencv.org找到github链接,或者直接进入https://github.com/opencv/opencv/releases找到相应的版本,这里以4.5.3为例:在该版本下有多个发

排列计算(一维差分)模板_tr-uhpc一维差分模型_paranoidZ的博客-程序员资料

先讲一下一维差分:原数组为a[],设差分数组为d[],用于解决对区间的操作问题。原数组记录每个点被访问的次数,开始都为0.例如:原数组a[]区间[L,R]都加上C则可以先利用差分数组d[L]+=c,d[R+1]-=c,因为差分数组的前缀和为原数组,即可发现,区间[L,R]之间的数都加C了,因为d[R+1]-c了所以[R+1,N]之间的数没有变化例子链接:题目:排列计算来源:牛客网题目描述天才程序员菜哭武和石头组队参加一个叫做国际排列计算竞赛 (International C..

VHDL与VerilogHDL的Testbench模板_FPGA入门到头秃的博客-程序员资料

VHDL与VerilogHDL的Testbench模板一般而言,一个testbench需要包含的部分如下:(1)VHDL:entity 和 architecture的声明;Verilog:module declaration(2)信号声明(3)实例化待测试文件(4)提供仿真激励其中第(4)步是关键所在,需要完成产生时钟信号,以及提供激励信号两个任务。VHDL Testbench中产生...

26设计模式之建造者模式_欢乐斗佛的博客-程序员资料

建造者模式是非常常用的一种设计模式,安卓原生的比如StringBuilder、Dialog就是用的这种设计模式。如果满足以下条件的时候可以考虑使用这种设计模式:1、用来创建一个对象而这个对象是由各种属性组成,创建步骤繁琐。2、对象的创建过程独立于创建该对象的类。3、隔离复杂对象的创建和使用,使得相同的创建过程能创建出不同的产品。该模式的定义为:将一个复杂对象的构建与它的表示分离,使

2021年8月最好用的苹果cms采集站_XoF夜的博客-程序员资料

分享一个CMS采集资源站(2021.08.29最新)采集站:https://vip.smyzj.cn/api.php/provide/vod/?ac=list配置教程在后台依次打开采集&gt;自定义接口&gt;添加(如图所示)资源名称自定义,接口地址填上方的采集站,接口类型为json,资源类型为视频,填写好之后点击测试随后点进刚刚添加的采集站这里分类填你自己的全部设置完后点击采集当日即可自动采集教程我们已经配置完了采集站,可我们要每天手动点击,那...

推荐文章

热门文章

相关标签