S2:java集合框架
Java集合就是一个容器。面向对象语言对事物的体现都是以对象的形式存在,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。如果往集合里存放基本数据类型,在存取过程中会有个自动装箱和拆箱。
因为容器中数据结构不同,容器有很多种。不断地将共性功能向上抽取,形成了集合体系,称之为集合框架。
集合框架的顶层就称之为Collection接口。所有的集合类都位于java.util包下,查阅API可以得到如下体系结构。在使用一个体系时,原则:参阅顶层内容。建立底层对象。

集合和数组的区别:
1:数组是固定长度的;集合可变长度的。
2:数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数据类型。
3:数组存储的元素必须是同一个数据类型;集合存储的对象可以是不同数据类型。
2. LIST 接口
ArrayList 集合类
|
返回类型 |
方法 |
说明 |
|
boolean |
add(Object o) |
在列表的末尾顺序添加元素,起始索引位置从 0 开始 |
|
void |
add(int index,Object o) |
在指定的索引位置元素注意:索引位置必须介于 0和列表中元素个数之间 |
|
int |
size() |
返回列表中的元素个数 |
|
Object |
get(int index) |
返回指定索引位置处的元素注意:取出的元素是 Object类型,使用前需要进行强制类型转换 |
|
boolean |
contains(Object o |
判断列表中是否存在指定元素 |
|
boolean |
remove(Object o) |
从列表中删除元素 |
|
Object |
remove(int index) |
从列表中删除指定位置元素,起始索引位置从 0 开始 |
对比:
- Vector 是线程安全的,ArrayList 重速度轻安全,是线程非安全的,所以当运行到多线程序环境中时候,需要程序员自己管理线程的同步问题。
- 当长度需要增长时,Vector 默认增长为原来的一倍,而 ArrayList 只增长 50%,有利于节约内存空间。
LinkedList 集合类
|
返回类型 |
方法 |
说明 |
|
void |
addFirst(Object o) |
在列表的首部添加元素 |
|
void |
addLast(Object o) |
在列表的末尾添加元素 |
|
Object |
getFirst() |
返回列表中的第一个元素 |
|
Object |
getLast() |
返回列表中的最后一个元素 |
|
Object |
removeFirst() |
删除并返回列表中的第一个元素 |
|
Object |
removeLast() |
删除并返回列表中的最后一个元素 |
3. MAP 接口
|
返回类型 |
方法 |
说明 |
|
Object |
put(Object key,Object value) |
以“键-值对”的方式进行存储注意:键必须是唯一的,值可以重复。如果试图添加重复的键,那么最后加入的键-值对将替换原先的键-值对。 |
|
Object |
get(Object key) |
根据健返回相关联的值,如果不存在指定的键,返回 null。 |
|
Object |
remove(Object key) |
删除由指定的键映射的“键-值对” |
|
int |
size() |
返回元素个数 |
|
Set |
keySet() |
返回键的集合 |
|
Collection |
values() |
返回值的集合 |
|
boolean |
containsKey(Object key) |
如果存在由指定的键映射的“键-值对”,返回true |
Hashtable 和 HashMap 的异同。
HashMap 类出现之前,JDK 中存在一个和它同样采用哈希表存储方式,同样实现键值映射的集合类 Hashtable。两者实现原理相同,功能相同,很多情况下可以互用。
- Hashtable 继承自 Dictionary 类,而 HashMap 实现了 Map 接口。
- Hashtable 是线程安全的,HashMap 重速度轻安全,是线程非安全的,所以当运行到多线程环境中时,需要程序员自己管理线程的同步问题。
- Hashtable不允许null值(key和value都不允许),HashMap允许null值(key和 value 都允许)。
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class MAP {
public static void main(String[] args) {
//遍历方式1:
Map<String,String>c=new HashMap<String,String>();
c.put("CN", "中国");
c.put("RU", "俄罗斯");
c.put("FR", "法兰西");
Set<String> set=c.keySet();
for (String key : set) {
System.out.println(key);
System.out.println(c.get(key));
}
//遍历方式2:
System.out.println("=====================================");
Collection<String> c1=c.values();
for (String values : c1) {
System.out.println(values); }
//遍历方式3:
System.out.println("=======================================");
Set<Entry<String, String>> c2=c.entrySet();
for (Entry<String, String> entry : c2) {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}
//遍历方式4:
System.out.println("=============================");
Set<String>keyset=c.keySet();
Iterator<String> iterator=keyset.iterator();
while(iterator.hasNext()){
String key=iterator.next();
System.out.println(key);
System.out.println(c.get(key));
}
//遍历方式5:
System.out.println("===============================");
Iterator<Entry<String, String>> c3=c.entrySet().iterator();
while (c3.hasNext()) {
Entry<String, String> en=c3.next();
System.out.println(en.getKey());
System.out.println(en.getValue()); } }
}
4. 迭代器 I TERATOR
- boolean hasNext():判断是否存在另一个可访问的元素。
- Object next(),返回要访问的下一个元素。
5 泛型集合
数组和集合的主要区别包括以下几个方面。
- 数组可以存储基本数据类型和对象,而集合中只能存储对象(可以以包装类形式存储基本数据类型)。
- 数组长度固定,集合长度可以动态改变。
- 定义数组时必须指定数组元素类型,集合默认其中所有元素都是 Object。
- 无法直接获取数组实际存储的元素个数,length 用来获取数组的长度,但可以通过size()直接获取集合实际存储的元素个数。
- 集合有多种实现方式和不同的适用场合,而不像数组仅采用分配连续空间方式。
- 集合以接口和类的形式存在,具有封装、继承和多态等类的特性,通过简单的方法和属性调用即可实现各种复杂操作,大大提高软件的开发效率。
总结
①集合弥补了数组的缺陷,它比数组更灵活更实用,可大大提高了软件的开发效率,而且不同的集合可适用于不同场合。
- Collection 接口存储一组不唯一、无序的对象。
- Set 接口继承 Collection 接口,存储一组唯一、无序的对象。
- List 接口继承 Collection 接口,存储一组不唯一、有序的对象。
- Map 接口存储一组成对的键一值对象,提供 Key 到 value 的映射。key 不要求有序、 不允许重复。value 同样不要求有序,但允许重复。
④ArrayList 和数组采用相同的存储方式,它的优点在于遍历元素和随机访问元素的效率比较高。LinkedList 采用链表存储方式,优点在于插入、删除元素时效率比较高。
S2:java集合框架的更多相关文章
- (转)Java集合框架:HashMap
来源:朱小厮 链接:http://blog.csdn.net/u013256816/article/details/50912762 Java集合框架概述 Java集合框架无论是在工作.学习.面试中都 ...
- Java集合框架:HashMap
转载: Java集合框架:HashMap Java集合框架概述 Java集合框架无论是在工作.学习.面试中都会经常涉及到,相信各位也并不陌生,其强大也不用多说,博主最近翻阅java集合框架的源码以 ...
- 【Java集合框架】规则集--Set
集合: Java主要支持三种: 1.规则集(Set) 用于存储一组不重复的元素 2.线性表(List) 用于存储一个由元素构成的有序集合 3.队列(Queue) 同与数据结构中的队列,存储用先进先出的 ...
- java集合框架容器 java框架层级 继承图结构 集合框架的抽象类 集合框架主要实现类
本文关键词: java集合框架 框架设计理念 容器 继承层级结构 继承图 集合框架中的抽象类 主要的实现类 实现类特性 集合框架分类 集合框架并发包 并发实现类 什么是容器? 由一个或多个确 ...
- 第49节:Java集合框架中底层文档的List与Set
Java集合框架中的List与Set // 简书作者:达叔小生 Collection -> Set 无序不重复 -> 无序HashSet,需要排序TreeSet -> List 有序 ...
- Java集合框架中底层文档的List与Set
Java集合框架中的List与Set // 简书作者:达叔小生 Collection -> Set 无序不重复 -> 无序HashSet,需要排序TreeSet -> List 有序 ...
- (Set, Map, Collections工具类)JAVA集合框架二
Java集合框架部分细节总结二 Set 实现类:HashSet,TreeSet HashSet 基于HashCode计算元素存放位置,当计算得出哈希码相同时,会调用equals判断是否相同,相同则拒绝 ...
- (Collection, List, 泛型)JAVA集合框架一
Java集合框架部分细节总结一 Collection List 有序,有下标,元素可重复 Set 无序,无下标,元素不可重复 以上为Collection接口 以ArrayList为实现类实现遍历:增强 ...
- Java集合框架List,Map,Set等全面介绍
Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I] +--java.util.ArrayList [C] +- ...
随机推荐
- PATB 1004 成绩排名 (20)
1004. 成绩排名 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 读入n名学生的姓名.学号.成绩,分 ...
- VirtualBox基础使用
VirtualBox基础使用 VirtualBox相对VMware来说是轻量级的虚拟软件, 最关键的是VirtualBox是开源免费的. 配置全局选项 点击管理-->全局设定, 进入设置界面. ...
- C++ 洛谷 P2458 [SDOI2006]保安站岗 from_树形DP
P2458 [SDOI2006]保安站岗 没学树形DP的,看一下. 题目大意:一棵树有N个节点,现在需要将所有节点都看守住,如果我们选择了节点i,那么节点i本身,节点i的父亲和儿子都会被看守住. 每个 ...
- 微服务-springboot热部署
spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用. IDEA进行热 ...
- SCUT 125 :笔芯回文(DP)
https://scut.online/p/125 125. 笔芯回文 题目描述 bxbx有一个长度一个字符串SS,bxbx可以对其进行若干次操作. 每次操作可以删掉一个长度为k(1 \leq k \ ...
- Android实现跳转到应用市场进行版本更新功能
最近需要做应用版本更新功能,因为之前已经写过一篇版本更新的功能了,虽然请求接口还是用的HttpUrlConnection,想着改改现在应用使用的请求方式也挺快的嘛,心里开始暗喜,可以偷偷懒了,哈哈哈. ...
- 【POJ - 3050】Hopscotch (dfs+回溯)
-->Hopscotch 这接写中文了 Descriptions: 奶牛们以一种独特的方式玩孩子们的跳房子游戏. 奶牛们创造了一个5x5的格子 他们熟练地跳上其中的一个格子,可以前后左右地跳(不 ...
- kuangbin专题专题四 Frogger POJ - 2253
题目链接:https://vjudge.net/problem/POJ-2253 思路: 从一号到二号石头的所有路线中,每条路线中都个子选出该路线中两点通路的最长距离,并在这些选出的最长距离选出最短路 ...
- MyBatis if标签的用法
<!-- 4.1.1 在WHERE条件中使用if 需求: 实现一个用户管理高级查询功能,根据输入的条件去检索用户信息.这个功能 还需要支持以下三种情况:当只有输入用户名时,需要根据用户名进行模糊 ...
- 个人永久性免费-Excel催化剂功能第80波-按条件查找数字,扩展原生查找功能
Excel的查找替换功能,只能对文本类数据查找较为得力,若需查找数字类型的数据,如查找大于100的数字,就无能为力,此篇Excel催化剂补足其短板. Excel数据类型知识背景介绍 用好Excel,必 ...