java集合类总结


Collection:单列集合类的跟接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别时List和Set还有Queue。其中List的特点时元素有序,元素可重复,Set的特点时元素无序且不可重复,Queue与List性质一样,不同之处时Queue是先进先出。

Map:键值对存储,每个值对应一个键,是一种映射关系,在Map集合中可以通过键值Key找到对应的值Value

List接口

方法声明

功能描述

Void add(int  index,Object element)

将元素element元素插入在List集合的index处

Boolean addAll(int index,Collection c)

将集合c所包含的所有元素插入到List集合的index处的元素

Object get(int index)

返回集合索引index处的元素

Object remove(int index)

删除index索引处的元素

Object set(int index,Object element)

将索引index处元素替换成element对象,并将替换后的元素返回

Int indexOf(Object o)

返回对象o在List集合中出现的位置索引

Int lastIndexOf(Object o)

返回对象o在List集合中最后一次出现的位置索引

List subList(int fromIndex,int toIndex)

返回从索引fromIndex(包括)到toIndex(不包括)处所有元素集合组成的子集合

 

ArrayList集合

 

ArrayList常见功能

添加
public boolean add(E e)
public void add(int index,E element) // 在指定的索引位置添加元素 

获取元素
public E get(int index)// 根据索引值获取元素


获取元素个数
public int size() //获取元素个数

删除元素
public boolean remove(Object o) // 直接删除元素 
public E remove(int index) //根据索引删除元素 ,并把删除的元素返回 

修改元素
public E set(int index,E element)// 使用element 去替换指定索引的元素 , 并返回被替换的元素

package com.ajax;import java.util.ArrayList;public class Example10 {public static void main(String[] args){ArrayList list1=new ArrayList();list1.add("1");list1.add("2");list1.add("3");list1.add("4");list1.add("5");for(Object obj:list1){System.out.println(obj);}}
}

LInkedList集合

查询快,增删慢

package com.ajax;import java.util.ArrayList;
import java.util.LinkedList;public class Example10 {public static void main(String[] args){LinkedList link=new LinkedList();link.add("1");link.add("2");link.add("3");link.add("4");link.add("5");System.out.println(link.toString());Object st= link.getFirst();System.out.println(st);}
}

 

 

 

Iterator接口

 

Iterator接口也是Java集合框架的成员,但它与Collection系列、Map系列的集合不一样:Collection系列集合、Map系列集合主要用于盛装其他对象,而Iterator则主要用于遍历(即迭代访问)Collection集合中的元素,Iterator对象也被称为迭代器。

  Iterator接口里定义了如下4个方法:

    –booleanhasNext():如果被迭代的集合还元素没有被遍历,则返回true。

    –Objectnext():返回集合里下一个元素。

    –voidremove() :删除集合里上一次next方法返回的元素

    –voidforEachRemaining(Consumer action),这是Java 8为Iterator新增的默认方法,该方法可使用Lambda表达式来遍历集合元素。

package com.ajax;
import java.util.ArrayList;
importjava.util.Iterator;
importjava.util.LinkedList;public classExample10 {public static void main(String[] args){LinkedList link=newLinkedList();link.add("1");link.add("2");link.add("3");link.add("4");link.add("5");Iterator it = link.iterator();while(it.hasNext()){System.out.println(it.next());}}
}


 

 

Foreach循环

 

for(容器中元素类型 临时变量:容器变量)

package com.ajax;importjava.util.ArrayList;public classExample10 {public static void main(String[] args){ArrayList list1=newArrayList();list1.add("1");list1.add("2");list1.add("3");list1.add("4");list1.add("5");for(Object obj:list1){System.out.println(obj);}}
}


 

 

ListIterator接口

 

为了迭代方式的多元化,在父类的基础上郑家了一下特有的方法

方法声明        功能描述

void add(Object o)  插入

ObjecthasPrevious()       判断对象是否有上个元素

void remove() 删除next或者previous返回的最后一个元素

package com.ajax;

 

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.ListIterator;public classExample10 {public static void main(String[] args){ArrayList link=newArrayList();link.add("1");link.add("2");link.add("3");link.add("4");link.add("5");ListIterator it=link.listIterator(link.size());while(it.hasPrevious()){System.out.println(it.previous());}}
}


 

//本例表示以集合的最后一个元素开始迭代

 

Enumeration接口

 

遍历Vector集合,Vector集合是线程安全的,而ArrayList集合是线程不安全的。

package com.ajax;

 

importjava.util.ArrayList;

importjava.util.Enumeration;

importjava.util.Iterator;

importjava.util.LinkedList;

importjava.util.ListIterator;

importjava.util.Vector;

 

public classExample10 {

         public static void main(String[] args){

                  Vector link=new Vector();

                  link.add("1");

                  link.add("2");

                  link.add("3");

                  link.add("4");

                  link.add("5");

                  Enumeration it=link.elements();

                  while(it.hasMoreElements()){

                          System.out.println(it.nextElement());

                  }

                  }

}

 

 

 

Set接口

 

Set接口和List接口一样,同样继承Collection接口,并没有对接口进行功能上的补充,只是比该接口更加严格了,Set无序没有重复

HashSet集合

 

当该集合添加一个对象时,首先会调用对象的hashCode()方法来确定与元素的存储位置,然后再调用对象的equals()方法来确保该位置没有出现重复元素,可以理解为像数据结构中的哈希散列表

package com.ajax;

 

importjava.util.ArrayList;

importjava.util.Enumeration;

importjava.util.HashSet;

importjava.util.Iterator;

importjava.util.LinkedList;

importjava.util.ListIterator;

importjava.util.Vector;

 

public classExample10 {

         public static void main(String[] args){

                  HashSet link=new HashSet();

                  link.add("1");

                  link.add("2");

                  link.add("3");

                  link.add("4");

                  link.add("1");

                  Iterator it=link.iterator();

                  while(it.hasNext()){

                          System.out.println(it.next());

                  }

                  }

}

 

 

//结果

3 2 1 5 4

没有出现重复值,之所以出现的顺序时无序因为此处的哈希散列表是根据对象的地址来存储的,地址越靠前优先输出

TreeSet集合

 

原理是自平衡的排序二叉树,特点是存储的元素会按照大小排序,并能去重(平衡二叉树的左孩子必须小于根节点,右孩子大于根节点的值,当出现重复的元素时不做处理,树的结构不会放生变化,因为节点中已经出现该值)。

package com.ajax;

 

importjava.util.ArrayList;

importjava.util.Enumeration;

importjava.util.HashSet;

importjava.util.Iterator;

importjava.util.LinkedList;

importjava.util.ListIterator;

importjava.util.TreeSet;

importjava.util.Vector;

 

public classExample10 {

         public static void main(String[] args){

                  TreeSet link=new TreeSet();

                  link.add("1");

                  link.add("2");

                  link.add("3");

                  link.add("4");

                  link.add("1");

                  Iterator it=link.iterator();

                  while(it.hasNext()){

                          System.out.println(it.next());

                  }

                  }

}

 

 

//结果:1234 根据平衡二叉树的原理,中序遍历的结果得出1234

Map接口

 

 

Map接口利用键值对的方式保存数据,其实现原理就是红黑树,红黑树是二叉查找树,如果读者想具体了解红黑树可以参考:http://blog.csdn.net/eric491179912/article/details/6179908写的很详细

常用的方法

方法声明                    功能描述

void put(Objectkey,Object calue) 将指定的值与此映射的值相关联(可选操作)

Object get(Objectkey)   通过key返回值,没有返回null

boolean containsKey(ObjectKey) 如果有映射关系返回true

booleancontainsValue(Object  value)         同上

 

HashMap集合

 

package com.ajax;

 

importjava.util.*;

 

public classExample10 {

         public static void main(String[] args){

                  Map link=new HashMap();

                  link.put(1, 'a');

                  link.put(3, 'c');

                  link.put(2, 'b');

                  link.put(5, 'd');

                  link.put(4, 'd');

                  link.put(4, 'e');

                  link.put(4, 'f');

                  Set keySet=link.keySet();//获取键的集合

                  Iterator it=keySet.iterator();

                  while(it.hasNext()){

                          Object key=it.next();

                          System.out.println("key:"+key+"value:"+link.get(key));

                  }

         }

}

 

 

//结果:

key:1value:a

key:2value:b

key:3value:c

key:4value:f

key:5value:d

通过测试可以发现,当键相同的元素存入map集合中的时候,每次保存的值都会发生改变直到最后一个存储的值为止

TreeMap集合

 

自平衡二叉树排序

package com.ajax;

 

importjava.util.*;

 

public classExample10 {

         public static void main(String[] args){

                  Map link=new TreeMap();

                  link.put(1, 'a');

                  link.put(4, 'd');

                  link.put(2, 'b');

                  link.put(5, 'd');

                  link.put(3, 'c');

                  Set keySet=link.keySet();//获取键的集合

                  Iterator it=keySet.iterator();

                  while(it.hasNext()){

                          Object key=it.next();

                          System.out.println("key:"+key+"value:"+link.get(key));

                  }

         }

}

 

 

 

Properties集合

 

map接口还有一个实现类Hashtable,它和HashMap十分相似,区别在于Hashstable是线程安全(线程安全不理解的参考:https://zhidao.baidu.com/question/168637634.html)的。

Hashtable存取元素的速度很慢目前基本被HashMap取代,但Hashtable有一个子类Properties主要用来存储字符串类型的键值对,开发中经常存取应用的配置项。


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

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

相关文章

c++ 获取数据类型最大值或最小值

范例&#xff1a; double min_dist numeric_limits<double>::max(); double max_dist numeric_limits<double>::min();

TCP为什么是四次挥手

TCP 3次握手 客户端向服务器发送一个SYN&#xff08;包含了SYN&#xff0c;SEQ&#xff09;。 当服务器接收到客户端发过来的SYN时&#xff0c;会向客户端发送一个SYNACK的数据包&#xff0c;其实ACK的ack等于上一次发送SYN数据包的&#xff08;SYNSEQ&#xff09;。 当客户…

Kudu 基本操作,详细操作讲解

kudu与Apache Impala紧密集成&#xff0c;允许您使用Impala使用Impala的SQL语法从Kudu平板中插入、查询、更新和删除数据&#xff0c;以替代使用Kudu API来构建自定义的Kudu应用程序。此外&#xff0c;您还可以使用JDBC或ODBC将使用任何语言、框架或商业智能工具编写的现有或新…

c++ 随机分布

uniform_distribution 模板定义了可以产生随机浮点值的分布对象类型&#xff0c;默认是 double 类型。默认构造函数创建的是标准正态分布&#xff0c;因此期望是 0&#xff0c;方差是 1.0: normal_distribution<double> disX(0, 1.0); uniform_real_distribution 类模板…

TCP的三次握手和四次挥手详解

为什么需要“三次握手” 在谢希仁著《计算机网络》第四版中讲“三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端&#xff0c;因而产生错误”。在另一部经典的《计算机网络》一书中讲“三次握手”的目的是为了解决“网络中存在延迟的重复分组”的问题。…

NameNode所需配置,NameNode内存配置计算,NameNode与block关系

NameNode 所需大小&#xff0c;与Block大小&#xff0c;HDFS副本数均有关&#xff0c;计算方式如下&#xff1a; 例&#xff1a;bolck为256M,副本为3个&#xff0c;10台机器&#xff0c;每台4TB数据&#xff0c; Namenode需要的内存为&#xff1a; 10 * 4 * 1024 * 1024 MB …

Debug和Realease版本的区别

vs中的程序有debug和release两个版本&#xff0c;Debug通常称为调试版本&#xff0c;通过一系列编译选项的配合&#xff0c;编译的结果通常包含调试信息&#xff0c;而且不做任何优化&#xff0c;以为开发 人员提供强大的应用程序调试能力。而Release通常称为发布版本&#xff…

zabbix server is not running the information displayed may not be current

页面报错如下 查看日志提示 30037:20190710:193016.878 cannot start alert manager service: Cannot bind socket to "/var/run/zabbix/zabbix_server_alerter.sock": [13] Permission denied.30039:20190710:193016.879 server #30 started [preprocessing manage…

Arrays 工具类

package com.ajax;import java.util.*;public class Example10 {public static void main(String[] args){int[] arr{1,3,2,5,4};System.out.println("排序前:");printArray(arr);Arrays.sort(arr);System.out.println("排序后:");printArray(arr);int ind…

Ubuntu系统opencv4.4 opencv_contribute安装常见问题

安装 下载opencv4.0.1及contribute模块 https://github.com/opencv/opencv/releases/tag/4.0.1 https://github.com/opencv/opencv_contrib/releases/tag/4.0.1 更换国内源 使用 ubuntu 原生源下载速度&#xff0c;可替换为国内源&#xff0c;提升下载速度 备份 ubuntu 原生…

VS2010项目配置详解

首先看一下项目设置中可以使用的宏&#xff08;环境变量&#xff09;&#xff0c;常用的有&#xff1a; ConfigurationName 配置名字&#xff0c;通常是Debug或者Release IntDir 编译器使用的中间目录&#xff0c;产出obj文件 OutDir 链接器使用的输出目录 ProjectDir 项目目录…

Centos7 下 zabbix服务安装与部署,linux监控服务

客户端安装参考&#xff1a;https://mp.csdn.net/postedit/95475740 安装Zabbix 关闭 SeLinux 临时关闭 setenforce 0 永久关闭 vi /etc/selinux/config 关闭防火墙 临时关闭 systemctl stop firewalld.service 永久关闭 systemctl disable firewalld.service安装基础环…

qt安装

sudo apt-get update sudo apt-get install qt4* sudo apt-get install qtcreator

Zabbix 安装agent

服务端安装参考&#xff1a;https://datamining.blog.csdn.net/article/details/95362947 安装前首先添加对应的yum repository rpm -ivh http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm yum install -y zabbix-agent 修改配置文件 …

Bootstrap 导入js文件,浏览器找不到文件问题

html导入文件是用href属性来导入&#xff0c;js利用src属性导入&#xff0c;都可以用相对路径来导入文件&#xff0c;只要确保相对路径正确不会找不到。 绝对路径&#xff1a;是从盘符开始的路径&#xff0c;形如C:\windo绝对路径&#xff1a;是从盘符开始的路径&#xff0c;形…

c/c++ 英语专业词汇表

运算符与表达式&#xff1a; 1.constant 常量 2. variable 变量 3. identify 标识符 4. keywords 关键字 5. sign 符号 6. operator 运算符 7. statement语句 8. syntax 语法 9. expression 表达式 10. initialition 初始化 11. number format 数据格式 12 declara…

ubuntu之间传文件

在文件电脑上操作如下 sftp 用户名ip地址 put 路径/文件名 另一台电脑的home文件夹就用这个文件了

windows 安装 zabbix agent 客户端

下载window客户端 https://assets.zabbix.com/downloads/3.4.0/zabbix_agents_3.4.0.win.zip 在C盘建立目录 C:/zabbix &#xff0c;并解压下载文件 修改配置参数 LogFilec:\zabbix\zabbix.log Server服务端ip ServerActive服务端ip Hostnameinstance-2c7t7v&#xff08;右…

C++面试题(一)

谈谈你所做的项目对网络编程熟悉吗&#xff1f;什么是TCP三次握手&#xff1f;那三次握手做了什么事情&#xff0c;有什么作用&#xff1f;UDP丢包的处理&#xff1f;TCP为什么能实现可靠传输&#xff1f;滑动窗口具体是怎么实现的&#xff1f;你觉得你对哪一些技术最擅长&…

Spark-shell 脚本批量执行命令,命令行批量执行命令

spark-shell 执行脚本&#xff0c;批量执行命令 #!/bin/bashsource /etc/profileexec spark-shell --name spark-sql-test --executor-cores 8 --executor-memory 8g --num-executors 1 --conf spark.cleaner.ttl240000 <<!EOF var startTime System.currentTimeM…