java集合总结_java集合小总结

java集合就是一个容器。

1.     集合概述

l       为了保存不确定的数据,或者对象,以及保存具有映射关系的数据。

l       所有的集合类都位于java.util包下。

1.1. 什么是集合,有什么特点?

面向对象语言对事物的体现都是以对象的形式存在,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。

集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。

1.2. 集合与数组的区别(集合特点)

首先我们要知道集合与数组是不同:

其中集合是可变长度的,集合中用size();

而数组是固定长度的,数组中是用length();

集合是用来放对象的,数组可以存储基本数据也可以存储引用数据类型;

有一点需要注意下,如果集合存放基本数据类型,在存取过程中会有个自动装箱和拆箱

集合可以放任意对象(引用嘛),但是数组只能放相同的数据类型;

对于如何使用集合,我们先看顶层的方法,然后去调用底层的子类来实现具体的功能。

1.3. 集合框架

由于集合内部的数据结构不同,集合分为多种容器。这些容器不断的向上抽取,就形成了集合框架。

Collection

|----------List(有序,,元素都有索引(角标),元素可以重复)

|--------Vector:基于数组实现,同步,线程安全。增删,查询都慢。

|--------ArrayList:基于数组实现,不同步,线程不安全,需要手动同步,查询的速度快

|--------LinkedList:基于链表实现,不同步,线程不安全,需要手动同步,增删都很快

|----------Set(无序,元素不可以重复)

|--------HsahSet:基于哈希表实现,不同步的。

|--------LinkedHsahSet

|--------TreeSet:基于二叉树实现,不同步的。自然排序,定制排序

Map集合(键值对)

|----------TreeMap基于二叉树,可以排序

|----------HashMap哈希表实现

Iterator迭代器

|----------Collection每个集合都有迭代器

|----------ListIterator主要用于List集合迭代,迭代过程可以操作元素

1.4. 集合常见方法

Collection的常见方法:

1,添加:boolean add(Object obj)://添加元素

booleanaddAll(Collectioncoll)://添加给定集合到当前集合

2,删除:boolean remove(object obj)://删除元素

booleanremoveAll(Collectioncoll);

void clear();//清空集合

3,判断:boolean contains(object obj)://是否包含指定元素

booleancontainsAll(Colllectioncoll);//是否包含给定集合

booleanisEmpty():判断集合中是否有元素。

4,获取:int size():

Iterator iterator():取出元素的方式:迭代器。

5,其他:booleanretainAll(Collection coll);取交集。

Object[] toArray():将集合转成数组。

1.5.遍历集合:迭代器Iterator:

也是集合框架的成员,但它主要用于遍历集合中的对象,封装了各种集合的底层细节,给集合框架提供了统一的接口。比如,这里举个例子。主要有3个方法:

booleanhashnext();如果仍有元素可以迭代,则返回true

E next()返回迭代的下一个元素

void remove()移除迭代器返回的最后一个元素

而对于map类集合有2中方式来遍历:

1:keySet()获取键对应的Set集合,然后在用Iterator配合get(Object key)获取每一个键所对应的值。

2:entrySet()获取键值对集合,存入Map.Entry集合中,Iterator对其进行迭代,在用getKey()取出键,getValue()取出值。

1.6. 集合的一些技巧:

需要唯一吗?

需要:Set

需要制定顺序:

需要:TreeSet

不需要:HashSet

但是想要一个和存储一致的顺序(有序):LinkedHashSet

不需要:List

需要频繁增删吗?

需要:LinkedList

不需要:ArrayList

l       看到array:就要想到数组,就要想到查询快,有角标.

l       看到link:就要想到链表,就要想到增删快,就要想要 add get remove+frist last的方法

l       看到hash:就要想到哈希表,就要想到唯一性,就要想到元素需要覆盖hashcode方法和equals方法。

l       看到tree:就要想到二叉树,就要想要排序,就要想到两个接口Comparable,Comparator 。

2.       List集合

l   有序(存入和取出的顺序一致),元素都有索引(角标),元素可以重复。

l   对于List,根据其内部结构不同又分为Arraylist、LinkedList、Vector

l   共性特点:可以操作角标

2.1.List子系

List:

|----Vector:数组数据结构,是同步的。增删,查询都很慢!已经呗ArrayList替代了

|----ArrayList:数组数据结构,是不同步的。。查询的速很度快。

|----LinkedList:链表数据结构,是不同步的。增删的速度很快。

2.2.List常用共性方法

1添加元素:

voidadd(intindex,Eelement);  //指定位置插入元素

void add(index,collection);      //将给定的集合添加到末尾

2删除元素:

Object remove(index):      //删除指定交表的元素,返被背删除的

3修改元素:

Objectset(intindex,Eelement);       //用指定元素替换列表中指定位置的元素

4获取元素:

Object get(index);      //返回列表中指定位置的元素

intindexOf(object);           //返回此列表中第一次出现的指定元素的索引,没有返回-1

intlastIndexOf(object);     //返回此列表中最后一次出现的指定元素的索引,没有返回-1

ListsubList(intfrom,intto);      //获取子集包含头不包含尾。

3.       Set集合

Set集合与Collection基本上一样,只不过内部元素是无序的,不允许重复。Add之前,会判断(equals方法)集合中是否包含此元素,如果包含返回true丙存入集合,如果不包含,返回false,不存。

n       1:HashSet:按hash算法来存储集合中的元素,因此具有良好的存取和查找功能。

l       特点:

?       不保证顺序。

?       不是同步的

?       集合元素可以是null

l       判断元素是否相等

?       判断hash值是否相等

?       Equals判断内容是否相等

n       1:TreeSet:按存储集合中的元素的compare或者比较器,来判断是否需添加到集合。

l       特点:

?       自然顺序或指定顺序。

?       不是同步的

?       集合元素可以是null

l       判断元素是否相等

?       判断hash值是否相等

?       Equals判断内容是否相等

3.1.LinkedHashSet的集合特点

是HashSet的一个子类,也是根据元素的hash值来判断元素位置,但同时使用链表维护元素次序。由于需要维护次序,所以性能略低于hashSet,但在迭代访问集合元素时,将有很好的性能。【有序不许重复】

3.2. 常用共性方法

1:增加元素:

booleanadd(Object obj);//添加一个元素,在末尾位置

booleanaddAll(Collection c);//添加一个集合,在末尾位置

2:删除元素:

booleanremove(Object obj);//删除一个元素。

booleanremoveAll(Collection c)//删除包含c的元素。

voidclear();//移除此集合的的所有元素

3:判断元素:

booleancontains(Object obj)//判断是否包含某个元素。

booleancontainsAll(Collection c);//在此集合中包含集合c中的所有元素

booleanisEmpty();//判断是否为空集合。

4:获取元素:

intsize();//获取size大小。

Iteratoriterator();//迭代器,用于取出元素的。配合it.next()和hasNext()组合使用。

3.3.Hash表确定元素是否相同

1:判断两个原素的hash值是否相同,如果相同个,判断两个内容是否相同

2:判断hash值相同,之前这块不是很理解,后来java培训学习时突然就想通了,其实是判断hashCode()是否相同,判断内容用equals()方法。

n       hashCode规则:

l       同一个对象多次调用返回的hashCode值相等。

l       2个对象euqals方法比较返回true时,他们hashCode也应相等。

l       对象中用作equals方法比较标准的field都应用来计算hashCode值

n       重写hashDode规则:

l       把每个对象的有意义的field,计算出一个hashcode值。

l       用第一步计算出来的多个hashCode来组合成一个值返回。

l       为了避免相加产生偶然相等。可以通过hashcode*一个质数相加返回。

例如:

Return name.hashCode*11 + age.hashCode*7;

练习:请定义ArryaList集合,并存储Person对象。如newPerson("lisi",20);

并取出。将姓名和年龄打印出来。

3.4.TreeeSet排序的2种方式

1,  让对象本身具备可比性。实现comparable接口的comparTo()方法。

2,  创建比较器。比较器实现Compartor接口,Compar()方法作为TreeSet对象的构造参数象传入。注意泛型。

3,  建议用第二种,使用灵活

·   publicstaticvoidmain(String[] args) {

TreeSet  ts= newTreeSet(newComparator() {

publicintcompare(Person o1, Person o2) {

returno1.getAge()-o2.getAge();

}

});

ts.add(newPerson("mike",28));

ts.add(newPerson("lisi",21));

ts.add(newPerson("zhouqi",29));

ts.add(newPerson("zhaoliu",25));

ts.add(newPerson("wangu",24));

for(Object o: ts) {

Person p = (Person) o;

System.out.println(p.getName() +"\t"+ p.getAge());

}

}

3.5. 选择HashSet还是TreeSet?

HashSet的性能总是比TreeSet好,(主要表现在添加、删除、查询等),因为TreeSet需要二外的红黑树来维护次序。只有当需要排序时才使用TreeSet。

HashSet有一个子类,LinkedSet对于普通测插入删除这个要比HashSet要慢些。因为要维护链表。

3.6. 安全问题解决

通常在创建是就调用Collections工具类的synchronizedSortedSet方法来包装集合。

例如

Sorted s =new Collections.synchronizedSortedSet(new Treeset(…))

4.       Map集合

Map集合用于存储那些有映射关系的数据;

Map也成为双列集合。

Map存的是一对元素:一个Key,一个Value。Key、Value可以使任何引用类型的数据。其中Map的Key不允许重复。

4.1.Map集合子体系

Map:

|----HashMap:哈希表结构;Key唯一;不同步;允许null作为键,值。hashCode()、equals()确定唯一

|----HashTable:哈希表结构;数据唯一;同步低效的。不允许null作为键,null作为值。

|----TreeMap:二叉树结构;Key唯一;可排序;不同步但高效;允许null作为键,null作为值。

补充:

4.2.Map常用方法

1添加元素:

·value put(key,value):返回前一个和key关联的值,如果没有返回null.

2,删除元素。

void  clear():清空集合。

value remove(key):根据指定的key翻出这个键值对。

3,判断元素。

boolean containsKey(key):判断是否包含给定的key

boolean containsValue(value):判断是否包含给定的value

boolean isEmpty();判断集合是否为空

4获取元素。

value get(key):通过键获取值,如果没有该键返回null。可以用来来判断是否包含指定键。

int size():获取键值对的个数。

4.3.Collection和Collections

collection是集合框架的顶层接口,集成了一些集合的共性方法;添加、删除、修改、查询、判断等。下分为list和set两个分支,其又各自有体系,其

中list有序,可以重复的,有分为vector arraylistlinkedlist(各个数据结构,特点)

其中set是无序不许重复的,有分为。hashset和treeset(各个数据结构,特点)

Collections是一个对collection操作的工具类,提供的都是静态方法(查找,排序,反转,加锁)

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

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

相关文章

java排序算法原理_排序算法原理与实现(java)

排序算法原理与实现(java) Java程序员必知的8大排序 [来源:本站 | 日期:2012年12月24日 | 浏览173 次] 字体:[大 中 小] 8种排序之间的关系: 1, 直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>2] 个…

python表示当前目录_从Python脚本获取当前目录的父项

使用os.path要获取包含脚本的目录的父目录(无论当前工作目录如何),您需要使用__file__.from os.path import dirname, abspathd dirname(dirname(abspath(__file__))) # /home/kristina/desire-directory基本上,您可以通过根据需要多次调用os.path.dirname来走向目录树.例&…

ios django 连接mysql_Django---Django连接Mysql数据库

前面介绍了Django平台的数据交互,这些数据都是在本地存放着,修改内容或者重新启动服务,数据就消失了,如果我们把数据存放在数据库中,不就保存了吗?Django数据库Django中自带的也有数据库(sqlite3)&#xff…

java io流操作_【Java基础】IO流操作

一、IO流概念: 输入输出流,也就是可以用来读写数据,以及上传下载数据。二、分类:1、从流的对象来分: 1)高端流:所有程序或者内存中的流都称为高端流。2)低端流:所有外界设备中的流都是低端流。…

java xmpp openfire_XMPP协议学习笔记三(Openfire服务器端搭建开发环境)

在了解了XMPP的基本结构和一些概念之后,我们暂时告别枯燥的理论学习,来动手搭建一下OpenfireSpark的开发环境,实际感受一下搭建整套IM通讯系统的过程。开发环境:windows XP sp3,Eclipse3.6.1,jdk1.6.0_24&a…

快速排序 java导包_排序算法-快速排序(Java实现)

上篇我们讲了冒泡排序,这次我们讲它的升级版快速排序,“快速”,一看就是个好算法~快速排序(QuickSort)是啥?我们先看下百度百科的介绍快速排序(Quicksort)是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1962年提出。它的基本…

java怎么判断一个char是汉字_JAVA中判断char是否是中文的几种方法

展开全部对照最新版本的 Unicode (最少是62616964757a686964616fe59b9ee7ad9431333335343330 6.0 版本,不知道现在是否有 7.0) 里面找从哪个 code point 数字开始到哪个数字结束的是常用中文汉字,另外冷僻汉字肯定不是用单个 char 能表示的,…

java接口经常变动前端怎么办_Java进程故障排查(CPU资源占用高,接口响应超时,功能接口停滞等)...

故障分析# 导致系统不可用情况(频率较大):1)代码中某个位置读取数据量较大,导致系统内存耗尽,进而出现Full GC次数过多,系统缓慢;2)代码中有比较消耗CPU的操作,导致CPU过高,系统运行缓慢&#x…

使用java实现面向对象编程第二章_java面向对象编程——第二章 java基础语法

第二章java基础语法1、java关键字abstractbooleanbreakbytecasecatchcharclassconstcontinuedefaultdodoubleelseextendsassertfinalfinallyfloatforgotoifimplementsimportinstanceofintinterfacelongnativenewstrictfppackageprivateprotectedpublicreturnshortstaticsupersw…

mysql 二维数组下标_php二维数组指定下标排序

/** Effect 排序* author YangYunHao* email 1126420614qq.com* time 2018-11-26 11:59:38* parameter arr:排序数组,key:按什么排,type:升序降序* */function arraySort($arr,$key,$typeasc){$keyArr []; // 初始化存放数组将要排序的字段值foreach ($arr as $k>$v){$keyA…

用java实现楼层导航_JS实现网站楼层导航效果代码实例

壹 ❀ 引言对于楼层导航而言,还有个重要的功能就是,随着滚动条滚动,达到某层时得同步点亮楼层导航的小图片。由于我前面也说了不打算使用JQ,所以想着用JS去实现它,实现并不难,主要得弄清滚动满足怎样的条件…

费尔马小定理素数java_利用费马小定理判断素数

今天听了ljss神犇的数论课,顿时感觉————我真的是太弱啦!我只能稍微写一下我能听懂的部分orz那么这就是今天我为数不多能听懂一点的之一......QAQ首先先介绍今天的主角:费马小定理————转自维基百科没看懂的话我稍微解释一下&#xff0…

java读取一段缓存音频文件夹_java实现酷狗音乐临时缓存文件转换为MP3文件的方法...

本文实例讲述了java实现酷狗音乐临时缓存文件转换为MP3文件的方法。分享给大家供大家参考,具体如下:酷狗临时缓存文件,其实已经是吧MP3文件下载好了,只是名字看上去好像是通过md5算法重命名的。酷狗在缓存文件的时候会同时缓存歌词…

java aspectj_AspectJ基本用法

AOP虽然是方法论,但就好像OOP中的Java一样,一些先行者也开发了一套语言来支持AOP。目前用得比较火的就是AspectJ了,它是一种几乎和Java完全一样的语言,而且完全兼容Java(AspectJ应该就是一种扩展Java,但它不是像Groovy…

php连接数据库返回数据类型,php从数据库读取数据,并以json格式返回数据的方法...

php中,从数据库读取数据,并以json格式返回数据。具体方法如下:第一步,定义相关变量$servername "localhost";$username "root";$password "root";$mysqlname "datatest";$json ;$da…

php json to object,PHP JSON_FORCE_OBJECT函数实现强转对象

JSON_FORCE_OBJECT在多级数组中,JSON_FORCE_OBJECT会将所有嵌套数值数组编码为对象。如果你只关注第一级数组(例如,使其适合作为MySQL JSON列),那么可以将第一级数组强制转换为对象,例如:$ json json_encode((object)…

php推送示例wordpress,给WordPress的编辑后台添加提示框的代码实例分享

WordPress 3.5 新添加了一个提示框功能,可以创建一个提示框,然后指向任何元素,比如下边的例子:本文就来教你怎么创建一个这样的提示框。首先需要添加提示框的脚本,这样才能使用提示框的 JS 方法。//挂载提示框脚本func…

php 去除标签内样式,PHP去除html标签,php标记及css样式代码参考

语法: string strip_tags(string str);传回值: 字串函式种类: 资料处理解析:本函式可去掉字串中包含的任何 HTML 及 PHP 的标记字串。若是字串的 HTML 及 PHP 标签原来就有错,例如少了大于的符号,则也会传回错误。而本函式和 fgetss() 有着相…

jmeter php网站,jmeter实战之phpwind随机回帖/发帖

关键词:jmeter phpwind 性能测试一、性能需求1)性能需求:30min内,phpwind随机回帖/发帖,观察服务器性能的表现。2)需求分析:2.1 核心业务论坛系统的核心业务主要是登录、看帖、发帖、回帖,业务建模时应考虑…

restful api php,RestfulAPI · ThinkPHP6.0接口开发与应用及uniapp快速入门(更新完毕) · 看云...

# Restful API>[success]Restful API是目前Web API 设计中比较流行的一种设计风格。## Restful API>[info]RESTful是一种软件架构风格、设计风格,而**不是**标准,只是提供了一组设计原则和约束条件。>[danger]对于这种风格,ThinkPHP…