三、集合(collection、set、list、map)

一、定义:

集合是Java里面最经常使用的,也是最重要的一部分。可以用好集合和理解好集合对于做Java程序的开发拥有无比的优点。

容器:用来存储数据,不同的容器集合以不同的格式保存对象,它可以自己主动的改变这个容器的所能存放的数据数量的大小。

这一点上,假设使用数组来存储的话,就显得十分的笨拙。

对于对象集合,必须执行的操作主要下面三种:

?

加入新的对象

?

删除对象

?

查找对象

Java容器类类库的用途是“保存对象”。并将其划分为两个不同的概念:

1) Collection 。

一组对立的元素,通常这些元素都服从某种规则。

List必须保持元素特定的顺序,而Set 不能有反复元素。

2) Map 。

一组 成对的“键值对”对象。

?

Collection – 对象之间没有指定的顺序,同意反复元素。

? Set – 对象之间没有指定的顺序,不同意反复元素

? List– 对象之间有指定的顺序,同意反复元素,并引入位置下标。

? Map – 接口用于保存keyword(Key)和数值(Value)的集合,集合中的每一个对象加入时都提供数值和keyword。Map 接口既不继承 Set 也不继承 Collection。

List、Set、Map共同的实现基础是Object数组

1.2.Collection

1.2.1经常用法

Collection 接口用于表示不论什么对象或元素组。想要尽可能以常规方式处理一组元素时,就使用这一接口。

Collection 在前面的大图也可以看出,它是List和Set 的父类。

而且它本身也是一个接口。它定义了作为集合所应该拥有的一些方法。例如以下:

注意:

集合必须仅仅有对象,集合中的元素不能是基本数据类型。

Collection接口支持如加入和除去等基本操作。设法除去一个元素时。假设这个元素存在,除去的仅仅是集合中此元素的一个实例。

? boolean add(Object element)

?

boolean remove(Object element)

Collection 接口还支持查询操作:

? int size()

? boolean isEmpty()

? boolean contains(Object element)

?

Iterator iterator()

组操作 :Collection 接口支持的其他操作。要么是作用于元素组的任务。要么是同一时候作用于整个集合的任务。

? boolean containsAll(Collection collection)

? boolean addAll(Collection collection)

?

void clear()

? void removeAll(Collection collection)

? void retainAll(Collection collection)

containsAll() 方法同意您查找当前集合是否包括了还有一个集合的全部元素,即还有一个集合是否是当前集合的子集。

其余方法是可选的,由于特定的集合可能不支持集合更改。 addAll() 方法确保还有一个集合中的全部元素都被加入到当前的集合中,通常称为并。

clear() 方法从当前集合中除去全部元素。

removeAll() 方法相似于 clear() ,但仅仅除去了元素的一个子集。 retainAll() 方法相似于 removeAll() 方法。只是可能感到它所做的与前面正好相反:它从当前集合中除去不属于还有一个集合的元素,即交。

集合类的基本方法的使用:

import java.util.*;

public class CollectionToArray {

public static void main(String[] args) {

Collection collection1=new ArrayList();//创建一个集合对象

collection1.add(“000”);//加入对象到Collection集合中

collection1.add(“111”);

collection1.add(“222”);

System.out.println(“集合collection1的大小:”+collection1.size());

System.out.println(“集合collection1的内容:”+collection1);

collection1.remove(“000”);//从集合collection1中移除掉 “000” 这个对象

System.out.println(“集合collection1移除 000 后的内容:”+collection1);

System.out.println(“集合collection1中是否包括000 :”+collection1.contains(“000”));

System.out.println(“集合collection1中是否包括111 :”+collection1.contains(“111”));

Collection collection2=new ArrayList();

collection2.addAll(collection1);//将collection1 集合中的元素全部都加到collection2中

System.out.println(“集合collection2的内容:”+collection2);

collection2.clear();//清空集合 collection1 中的元素

System.out.println(“集合collection2是否为空 :”+collection2.isEmpty());

//将集合collection1转化为数组

Object s[]= collection1.toArray();

for(int i=0;i

1.3 List

1.3.1概述

Collection接口实际上并没有直接的实现类。而List是容器的一种。表示列表的意思。当我们不知道存储的数据有多少的情况,

我们就行使用List 来完毕存储数据的工作。

比如保存一个应用系统当前的在线用户的信息。List的最大的特点就是可以自己主动

的依据插入的数据量来动态改变容器的大小。

1.3.2 经常用法

List 就是列表的意思。它是Collection 的一种,即继承了 Collection 接口,又定义一个同意反复项的有序集合。该接口不但

可以对列表的一部分进行处理,还加入了面向位置的操作。

List 是按对象的进入顺序进行保存对象,而不做排序或编辑操作。它

除了拥有Collection接口的全部的方法外还拥有一些其他的方法。面向位置的操作包括插入某个元素或 Collection 的功能。还

包括获取、除去或更改元素的功能。

在 List 中搜索元素可以从列表的头部或尾部開始。假设找到元素,还将报告元素所在的位置。

1、 void add(int index, Object element):加入对象element到位置index上

2、 boolean addAll(int index, Collection collection):在index位置后加入容器collection中全部的元素

3、 Object get(int index) :取出下标为index的位置的元素

4、 int indexOf(Object element) :查找对象element 在List中第一次出现的位置

5、 int lastIndexOf(Object element) :查找对象element 在List中最后出现的位置

6、 Object remove(int index) :删除index位置上的元素

7、 Object set(int index, Object element) :将index位置上的对象替换为element 并返回老的元素。

List(提供基于索引的对成员的随机訪问)——ArrayList—–提供高速的基于索引的成员訪问,对尾部成员的添加和删除支持较好

成员可为随意Object子类的对象

———-LinkedList—–对列表中不论什么位置的成员的添加和删除支持较好。但对基于索引的成员訪问支持性能较差

成员可为随意Object子类的对象

在“集合框架”中有两种常规的 List 实现:ArrayList 和 LinkedList。

使用两种 List 实现的哪一种取决于您特定的须要。

假设要

支持随机訪问,而不必在除尾部的不论什么位置插入或除去元素,那么,ArrayList 提供了可选的集合。但假设,您要频繁的从列表的中间

位置加入和除去元素,而仅仅要顺序的訪问列表元素。那么,LinkedList 实现更好。

LinkedList 来实现一个简单的队列的样例:

import java.util.*;

public class ListExample {

public static void main(String args[]) {

LinkedList queue = new LinkedList();

queue.addFirst(“Bernadine”);

queue.addFirst(“Elizabeth”);

queue.addFirst(“Gene”);

queue.addFirst(“Elizabeth”);

queue.addFirst(“Clara”);

System.out.println(queue);

queue.removeLast();

queue.removeLast();

System.out.println(queue);

}

}

执行程序产生了下面输出。请注意,与 Set 不同的是 List 同意反复。

[Clara, Elizabeth, Gene, Elizabeth, Bernadine]

[Clara, Elizabeth, Gene]

该的程序演示了详细 List 类的使用。第一部分,创建一个由 ArrayList 支持的 List。填充完列表以后。特定条目就得到了。演示样例

的 LinkedList 部分把 LinkedList 当作一个队列。从队列头部加入东西,从尾部除去。

List 接口不但以位置友好的方式遍历整个列表,还能处理集合的子集:

ListIterator listIterator() :返回一个ListIterator 跌代器,默认開始位置为0

ListIterator listIterator(int startIndex) :返回一个ListIterator 跌代器。開始位置为startIndex

List subList(int fromIndex, int toIndex) :返回一个子列表List ,元素存放为从 fromIndex 到toIndex之前的一个元素。

处理 subList() 时,位于 fromIndex 的元素在子列表中,而位于 toIndex 的元素则不是。提醒这一点非常重要。

for-loop :

for (int i=fromIndex; i

1.4.Collection 和 Collections的差别

Collection是个java.util下的接口。它是各种集合结构的父接口。

继承与他的接口主要有Set 和List.

Collections是个java.util下的专用静态类,它包括有各种有关集合操作的静态方法。提供一系列静态

方法实现对各种集合的搜索、排序、线程安全化等操作。

1.5.Array与Arrays的差别

1.数组类Array,是Java中最主要的一个存储结构。提供了动态创建和訪问 Java 数组的方法。当中的

元素的类型必须同样。

效率高。但容量固定且无法动态改变。 它无法推断当中实际存有多少元素。

length仅仅是告诉我们array的容量。

2、Arrays类,此静态类专门用来操作array ,提供搜索、排序、复制等静态方法。equals():比較两个

array是否相等。array拥有同样元素个数,且全部相应元素两两相等。 sort():用来对array进行排序。

binarySearch():在排好序的array中寻找元素。

collections

例:

import java.util.*;

public class CollectionsDemo {

public static void main(String[] args) {

List sl = new ArrayList();

sl.add(“jhn”);

sl.add(“ncgcxs”);

sl.add(“rgd”);

sl.add(“ceaz”);

sl.add(“vfe”);

sl.add(“byt”);

sl.add(“fe”);

Collections.sort(sl);

System.out.println(sl);

//Collections.binarySearch(1);

//Collections.copy(sl);

System.out.println(Collections.max(sl));//max

System.out.println(Collections.min(sl));//min

Collections.reverse(sl);//反转

System.out.println(sl);

Collections.shuffle(sl);//打散

System.out.println(sl);

}

HashMap遍历的两种方式

第一种:

Map map = new HashMap();

Iterator iter = map.entrySet().iterator();

while (iter.hasNext()) {

Map.Entry entry = (Map.Entry) iter.next();

Object key = entry.getKey();

Object val = entry.getValue();

}

效率高,以后一定要使用此种方式!

另外一种:

Map map = new HashMap();

Iterator iter = map.keySet().iterator();

while (iter.hasNext()) {

Object key = iter.next();

Object val = map.get(key);

}

效率低,以后尽量少使用。

HashMap 与 TreeMap的差别

集合框架”提供两种常规的Map实现:HashMap和TreeMap (TreeMap实现SortedMap接口)。

在Map

中插入、删除和定位元素。HashMap 是最好的选择。但假设您要按自然顺序或自己定义顺序遍历键,那

么TreeMap会更好。使用HashMap要求加入的键类明白定义了hashCode()和equals()的实现。这个TreeMap

没有调优选项,由于该树总处于平衡状态。

java基础知识汇总4的更多相关文章

  1. 沉淀,再出发:Java基础知识汇总

    沉淀,再出发:Java基础知识汇总 一.前言 不管走得多远,基础知识是最重要的,这些知识就是建造一座座高楼大厦的基石和钢筋水泥.对于Java这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的 ...

  2. java基础知识汇总

    1.     类的访问控制权限共有两种:public和默认.默认级别的类只能被同一个包中的类看到,包外不可见. 2.     类成员的访问权限共有四种:public,protected,private ...

  3. java基础知识汇总(持续更新中....)

    1.java四大特性:抽象.继承.封装,多态 构造函数: http://blog.csdn.net/qq_33642117/article/details/51909346 2.java数据基本类型: ...

  4. java基础知识汇总6(html篇)

    五.html // 定义文档类型. < html> 定义 HTML 文档. < body> 定义文档的主体. < h1> to < h6> 定义 HTM ...

  5. java基础知识-笔记整理

    1.查看已安装jdk文件路径 CMD输入java -verbose.   2.java学习提升路线 java学习视屏地址: http://www.icoolxue.com/album/show/38 ...

  6. Java基础知识常见面试题汇总第一篇

    [Java面试题系列]:Java基础知识常见面试题汇总 第一篇 文中面试题从茫茫网海中精心筛选,如有错误,欢迎指正! 1.前言 ​ 参加过社招的同学都了解,进入一家公司面试开发岗位时,填写完个人信息后 ...

  7. java基础知识文章汇总

    将之前的所有关于Java基础知识的随笔,整理成质量较高的十几篇随笔,几乎是好几篇比较零散的随笔合成现在的一篇,自认为还不错. java基础(一) 深入解析基本类型 java基础(二) 自增自减与贪心规 ...

  8. 【Java面试题系列】:Java基础知识常见面试题汇总 第一篇

    文中面试题从茫茫网海中精心筛选,如有错误,欢迎指正! 1.前言 ​ 参加过社招的同学都了解,进入一家公司面试开发岗位时,填写完个人信息后,一般都会让先做一份笔试题,然后公司会根据笔试题的回答结果,确定 ...

  9. Java 基础知识总结

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.数据类型:  数据类型:1>.基本数据类型:1).数值型: 1}.整型类型(byte  8位   (by ...

随机推荐

  1. 细说robots.txt

    robots.txt Robots协议(也称为爬虫协议.机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可 ...

  2. Selenium2+python自动化48-登录方法(参数化)【转载】

    前言 登录这个场景在写用例的时候经常会有,我们可以把登录封装成一个方法,然后把账号和密码参数化,这样以后用的登录的时候,只需调用这个方法就行了 一.登录方法 1.把输入账号.输入密码.点击登录按钮三个 ...

  3. spring applicationContext.xml 中bean配置

    如果采用set get方法配置bean,bean需要有set get 方法需要有无参构造函数,spring 在生成对象时候会调用get和set方法还有无参构造函数 如果采用constructor方法则 ...

  4. cobbler的web界面

    添加用户名和密码 useradd test echo "123456" | passwd --stdin test 修改认证方式为pam #vim /etc/cobbler/mod ...

  5. Codeforces Round 254 (Div. 2)

    layout: post title: Codeforces Round 254 (Div. 2) author: "luowentaoaa" catalog: true tags ...

  6. POJ1128 (TopSort)(递归)(回溯)

    Frame Stacking Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5220   Accepted: 1809 De ...

  7. ba resme

    Resume Name: Zhou Heng Gender: Male Email : jackyzhouheng@gmail.com Self Assessment: I have more tha ...

  8. [NOI2018]屠龙勇士(exCRT)

    首先很明显剑的选择是唯一的,直接用multiset即可. 接下来可以发现每条龙都是一个模线性方程.设攻击第i条龙的剑的攻击力为$s_i$,则$s_ix\equiv a_i\ (mod\ p_i)$. ...

  9. [APIO2015]巴厘岛的雕塑

    题目描述 印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道. 在这条主干道上一共有 NN 座雕塑,为方便起见,我们把这些雕塑从 11 到 NN 连续地进行标号,其中第 ii 座雕塑的年龄是 Y ...

  10. 【二分图】【最大匹配】【匈牙利算法】CODEVS 2776 寻找代表元

    裸的匈牙利,存模板. #include<cstdio> #include<vector> #include<cstring> using namespace std ...