服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - JAVA提高第九篇 集合体系

JAVA提高第九篇 集合体系

2021-01-28 12:06pony1223 Java教程

这篇文章主要为大家详细介绍了JAVA提高第九篇集合体系的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

在经过了前面的jdk6.0新特性的学习后,将进一步深入学习jdk,因为集合的重要性,因此从集合开始入手分析:

一、集合概况

java是一种面向对象语言,如果我们要针对多个对象进行操作,那么首先必要将多个对象进行保存起来之后,然后才能操作,那么我们肯定会想到用数组来进行存放,但数组长度固定,不能满足变化的要求。所以,java提供了集合。

数组与集合的区别:

数组:长度固定、可以存放基本类型/引用类型、数组中元素的类型必须一致

集合:长度可变自动扩容、只能存放引用类型、集合中元素类型可以不一致但一般保持一致

二、集合体系

集合作为一个容器,可以存储多个元素,但是由于数据结构的不同,java提供了多种集合类。将集合类中共性的功能,不断向上抽取,最终形成了集合体系结构。

数据结构:数据存储的方式

java中集合类的关系图:

JAVA提高第九篇 集合体系

JAVA提高第九篇 集合体系

三、collection【单值接口】

collection是最基本的集合接口,一个collection代表一组object,即collection的元素(elements)。因为一些collection允许存放相同的元素而另一些不行。一些能有序而另一些不行,于是衍生出两个子类接口list和set。

JAVA提高第九篇 集合体系

collection接口中常用方法:

a:添加功能
boolean add(object obj):向集合中添加一个元素
boolean addall(collection c):向集合中添加一个集合的元素。
b:删除功能
void clear():删除集合中的所有元素。
boolean remove(object obj):从集合中删除指定的元素
boolean removeall(collection c):从集合中删除一个指定的集合元素。
c:判断功能
boolean isempty():判断集合是否为空。
boolean contains(object obj):判断集合中是否存在指定的元素。
boolean containsall(collection c):判断集合中是否存在指定的一个集合中的元素。
d:遍历功能
iterator iterator():就是用来获取集合中每一个元素。
e:长度功能
int size():获取集合中的元素个数
f:交集功能
boolean retainall(collection c):判断两个集合中是否有相同的元素。
g:把集合转换成数组
object[] toarray():把集合变成数组。

list接口中常用方法:

首先我们知道list接口是collection接口的子类,所以也具备上面的方法,但除了上面的方法外,list接口中典型的arraylist底层是采用的数组结构,因此还具体被一些索引操作的方法,如下:

list的特有功能
a:添加功能
void add(int index, object obj):在指定位置添加元素
b:删除功能
object remove(int index):根据指定索引删除元素,并把删除的元素返回。
c:修改功能
object set(int index, object obj):把指定索引位置的元素修改为指定的值,返回修改前的值。
d:获取功能
int indexof(object o):返回指定元素在集合中第一次出现的索引
object get(int index):获取指定位置的元素
listiterator listiterator():列表迭代器
e:截取功能
list sublist(int fromindex, int toindex):截取集合。

set接口中常用方法:

set接口下的元素无序,不可以重复。其下面分为hashset和treeset。

hashset

底层数据结构是哈希表,线程不安全,效率高。
保证唯一性依赖两个方法:hashcode()和equals()。
顺序:
判断hashcode()值是否相同。
相同:继续走equals(),看返回值
如果true:就不添加到集合。
如果false:就添加到集合。
不同:就添加到集合。

treeset

底层数据结构是二叉树,线程不安全,效率高。
保证元素唯一性的方法时根据返回值是否是0。
保证排序的两种方式:
自然排序(元素具备比较性):实现comparable接口
比较器排序(集合具备比较性):实现comparator接口

四、迭代器(iterator)

迭代器,从第一张java集合类图关系中可以看出,除了中间的collection外,置于最顶上的左边为迭代器iterator.

1.使用步骤:

1、通过集合对象获取迭代器对象。
2、通过迭代器对象判断。
3、通过迭代器对象获取。

2.迭代器原理

由于多种集合的数据结构不同,所以存储方式不同,所以,取出方式也不同。那么这个时候,把判断和获取功能定义在了一个接口中,将来,遍历哪种集合的时候,只要该集合内部实现这个接口即可。【迭代器模式】

3.collection存储字符串和自定义对象并通过迭代器遍历

?
1
2
3
4
5
6
7
8
9
10
11
collection c = new arraylist();
c.add("hello");
c.add("world");
c.add("java");
 
iterator it = c.iterator();
while(it.hasnext())
{
  string s = (string)it.next();
  system.out.println(s);
}

4.listiterator迭代器是iterator的子接口

所以list的遍历方式共有三种1、iterator迭代器2、listiterator迭代器3、普通for+get()

五、map<键值对接口>

map是一个键值对形式的集合。它的元素都是有键和值组成。map的键(key)是唯一的,值(value)可以重复。

JAVA提高第九篇 集合体系

map接口中常用方法:

a:添加功能
v put(k key ,v value) :当key在集合中不存在是,添加元素;当key存在时替换元素
b:判断功能
boolean containskey (object key) :判断指定的键是否在集合中存在
boolean containsvalue(object value):判断指定的值是否在集合中存在
boolean isempty() :判断集合是否为空
c:删除功能
void clear():清除所有键值对数据
d:获取功能
object get (object key) :根据键获取值
set<k> keyset(): 所有键的集合
collection<v>values() :所有值的集合
set<map.entry<k,v>> entryset() :返回此映射中包含的映射关系的 set 视图
e:长度功能
int size()

map包括hashmap、hashtable和treemap。其中,hashtable已基本被hashmap取代, 新代码中基本不在使用hashtable
(注:hashmap支持null , hashtable不支持null )

map的遍历方式:

1.键找值:

?
1
2
3
4
5
6
7
8
9
10
11
public static void main(string[] args) {
  map<string,integer> map = new hashmap<string,integer>();
  map.put("二阳",23);
  map.put("二峥",24);
  map.put("二光",25);
  set<string> keys=map.keyset();  //把键其中起来,存入到set集合中.
  for(string key:keys){    //遍历键集合,获取每一个键。增强for
   integer value=map.get(key);  //让键去找值 get(object key)
   system.out.println(key+"***"+value);
  }
}

 2.键值对

?
1
2
3
4
5
6
7
8
9
10
11
public static void main(string[] args) {
  map<string,integer> map = new hashmap<string,integer>();
  map.put("二阳",23);
  map.put("二峥",24);
  map.put("二光",25);
  set<string> keys=map.keyset();  //把键其中起来,存入到set集合中.
  for(string key:keys){    //遍历键集合,获取每一个键。增强for
   integer value=map.get(key);  //让键去找值 get(object key)
   system.out.println(key+"***"+value);
  }
}

通过上面的学习,让我们对集合的类图有了大体的认识,后面我们将会逐一深入我们最常用的比如:arraylist hashmap等知识点的深入学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:http://www.cnblogs.com/pony1223/p/7745882.html

延伸 · 阅读

精彩推荐