JAVA提高九:集合体系
在经过了前面的JDK6.0新特性的学习后,将进一步深入学习JDK,因为集合的重要性,因此从集合开始入手分析:
一、集合概况
Java是一种面向对象语言,如果我们要针对多个对象进行操作,那么首先必要将多个对象进行保存起来之后,然后才能操作,那么我们肯定会想到用数组来进行存放,但数组长度固定,不能满足变化的要求。所以,JAVA提供了集合。
数组与集合的区别:
数组:长度固定、可以存放基本类型/引用类型、数组中元素的类型必须一致
集合:长度可变自动扩容、只能存放引用类型、集合中元素类型可以不一致但一般保持一致
二、集合体系
集合作为一个容器,可以存储多个元素,但是由于数据结构的不同,java提供了多种集合类。将集合类中共性的功能,不断向上抽取,最终形成了集合体系结构。
数据结构:数据存储的方式
Java中集合类的关系图:
三、Collection【单值接口】
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。因为一些Collection允许存放相同的元素而另一些不行。一些能有序而另一些不行,于是衍生出两个子类接口List和Set。
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存储字符串和自定义对象并通过迭代器遍历
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)可以重复。
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.键找值:
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.键值对
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等知识点的深入学习。
JAVA提高九:集合体系的更多相关文章
- Java学习之==>集合体系(待续。。)
一.概述 Java的集合体系,本质上是一个陈放数据的容器,像之前学过的数组也是陈放数据的容器,但在 Java 中数组的长度是固定的,使用起来没那么方便.集合提供了更加强大的功能,使用起来也更方便和快捷 ...
- Java集合体系总结
一.集合框架 集合是容纳数据的容器,java常用的集合体系图如下.以集合中是否运行重复元素来分,主要有List和Set接口,List集合中可以有重复元素,Set集合集合中的元素不可重复,Iterato ...
- Java提高合集(转载)
转载自:http://www.cnblogs.com/pony1223/p/7643842.html Java提高十五:容器元素比较Comparable&Comparator深入分析 JAVA ...
- Java面试专题-集合篇(2)
- java提高篇(十九)-----数组之二
前面一节主要介绍了数组的基本概念,对什么是数组稍微深入了一点点,在这篇博文中主要介绍数组的其他方面. 三.性能?请优先考虑数组 在java中有很多方式来存储一系列数据,而且在操作上面比数组方便的多?但 ...
- paip.提高效率---集合的存取括号方式 uapi java python php js 的实现比较
paip.提高效率---集合的存取括号方式 uapi java python php js 的实现比较 ##java ----------- 在JDK1.7中,摒弃了Java集合接口的实现类,如:Ar ...
- 浅谈Java的集合体系
集合体系框架图 集合接口 Java集合类库将接口(interface)与实现(implementation)分离,如上图,Set是一个集合接口,而HashSet与TreeSet都是实现了Set接口的子 ...
- JAVA提高十九:WeakHashMap&EnumMap&LinkedHashMap&LinkedHashSet深入分析
因为最近工作太忙了,连续的晚上支撑和上班,因此没有精力来写下这篇博客,今天上午正好有一点空,因此来复习一下不太常用的集合体系大家族中的几个类:WeakHashMap&EnumMap&L ...
- Java集合中List,Set以及Map等集合体系详解
转载请注明出处:Java集合中List,Set以及Map等集合体系详解(史上最全) 概述: List , Set, Map都是接口,前两个继承至collection接口,Map为独立接口 Set下有H ...
随机推荐
- Intellij idea插入表数据【在UI界面插入出错】
使用Intellij idea向数据库插入表数据的时候,如果该表是联合主键的,那么不能使用UI界面来进行插入-- 必须通过SQL语句才能插入-- 至于为什么?我也不知道-.搞了大半天--想省时间不写S ...
- Node.js博客搭建
Node.js 博客搭建 一. 学习需求 Node 的安装运行 会安装node,搭建node环境 会运行node. 基础模块的使用 Buffer:二进制数据处理模块 Event:事件模块 fs:文件系 ...
- WPF控件自适应屏幕
如果说界面设计,那么自适应问题一定无法避免,今天就来分享一下,wpf如何实现自适应,先看一下效果:(文末添加源代码下载) 基本思路就是用 Grid 的网格,进行宽度的自动填充适应, 不过对于 ...
- [Java语言] 《struts2和spring MVC》的区别_动力节点
1.Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上Spr ...
- MySQL数据备份之mysqldump使用(转)
mysqldump常用于MySQL数据库逻辑备份. 1.各种用法说明 A. 最简单的用法: mysqldump -uroot -pPassword [database name] > [dump ...
- Online Bayesian Probit Regression介绍之Factor Graph
下面就开始讲讲概率图中的Factor Graph.概率图博大精深,非我等鼠辈能够完全掌握,我只是通过研究一些通用的模型,对概率图了解了一点皮毛.其实我只是从概率这头神兽身上盲人摸象地抓掉几根毛,我打算 ...
- HIVE---基于Hadoop的数据仓库工具讲解
Hadoop: Hadoop是一个由Apache基金会所开发的分布式系统基础架构.用来开发分布式程序.充分利用集群的威力进行高速运算和存储.Hadoop实现了一个分布式文件系统(Hadoop Dist ...
- VUE实现请求数据
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- MySQL 高效查询
在“现场加号&预约排队”项目中,“号贩子排查任务”在线下测试的时候没有问题,但是线上后,由于线上的数据量较大,导致在执行查询的时系统崩溃:后来经过查找,发现写的sql不合理,查出了许多用不到的 ...
- Jquery滚动到页面底部自动Ajax加载图文列表,类似图片懒加载效果,带加载效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...