三、集合(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. 《Java编程思想》笔记 第六章 访问权限控制

    1.编译单元 一个 编译单元即 .java 文件 内只能有一个 public 类  且该文件名必须与public 类名 完全一致. 编译单元内也可以没有public类 文件名可随意. 2. 包:库单元 ...

  2. linux下命令行文件路径隐藏

    https://askubuntu.com/questions/16728/hide-current-working-directory-in-terminal 在~.,bashrc里添加 expor ...

  3. Zookeeper概念学习系列之zookeeper实现分布式进程监控

    不多说,直接上干货! 假设要监控多台服务器上的A程序运行状态, 当发现有服务器上的A程序下线的时候, 给管理员发短信, 并且尝试重启A程序. zookeeper实现分布式进程监控主要利用zk的临时节点 ...

  4. 【转】Celery 分布式任务队列快速入门

    Celery 分布式任务队列快速入门 本节内容 Celery介绍和基本使用 在项目中如何使用celery 启用多个workers Celery 分布式 Celery 定时任务 与django结合 通过 ...

  5. (20)python pycharm

    使用GitHub 一·登录GitHub 1. 2. 3. 4. 二. 登录成功后再配置git 1 2.创建项目到github 3.下载github

  6. 如何在Android Studio中创建jniLib和asset文件夹 2

    1.创建asset文件夹 如图进行操作 2.创建jniLib文件夹 —打开app下面的gradle文件(不是project的gradle) —在gradle文件的Android标签里面添加 sourc ...

  7. 开源的图像滤镜库----for Android

    1.GPUImage for Android(推荐使用) GPUImage基于OpenGL实现的各种各样图像滤镜(图像处理)效果,多达50多种, idea源于GPUImage for iOS,基本囊括 ...

  8. Spfa+DP【p2149】[SDOI2009]Elaxia的路线

    Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间. Elaxia和w**每天都要奔波于宿舍和实验室之间 ...

  9. 【树状数组】【枚举约数】 - Ambitious Experiment

    给定一个序列,支持以下操作: 对区间[l,r]的每个i,将1i,2i,3i,...这些位置的数都加d. 询问某个位置的数的值. 如果把修改看作对区间[l,r]的每个数+d,那么询问x位置上的数时,显然 ...

  10. [CF911G]Mass Change Queries

    题目大意: 给你一个长度为n的数列a,按顺序进行以下m次操作,每次将区间[l,r]中的所有x变成y,问最后数列是怎样的. 思路: 线段树. 每个线段树结点上维护当前区间每个数分别会变成多少.时间复杂度 ...