JAVA集合
为了保存数量不确定的数据或者提供映射关系的数据,Java提供了集合类,也称作集合类,Collection和Map分别为两个根接口。两个接口体系的继承系如下图
(图片来源于网络)
Collection接口下有List、Set、Queue三个子接口(着重讲前两个接口)。Collection定义了如下一些操作集合的方面:
- boolean add(Object o) //向集合中添加一个元素,添加成功返回true
- boolean addAll(Collection c) //把集合c中的所有元素添加到指定集合,添加成功返回true
- boolean remove(Object o) //删除元素O,当集合中有多个元素O时,只删除第一个符合条件的元素,返回true
- boolean removeAll(Collection c) //从集合中删除集合C中包含的所有元素
- void clear() //清除集合中的所有元素
- Iterator iterator //返回一个Iterator对象,用于变量集合里的元素
- Object[] toArray() //将集合元素变成数组元素
- int size() //返回集合中元素的个数
Set接口的所含有元素不能重复。Set常用的几个实现类
| HashSet | 无序地遍历成员,成员可为任意Object子类的对象,但如果覆盖了equals方法,同时注意修改hashCode方法。 |
| LinkedHashSet | HashSet的一个子类,按元素添加顺序访问集合中的元素。 |
| TreeSet | SortSet接口的实现类,支持子集等按要求顺序的操作 |
| EnumSet | 枚举类集合,所有元素必须是同一枚举类的枚举值, |
Set实现类性能比较:HashSet的性能比TreeSet的性能要好,TreeSet需要维持元素次序带来的开销。HashSet的子类LinkedHashSet,插入删除性能比HashSet要差一点,需要维持链表带来的开销,但是遍历的时候因为有链表,所以比HashSet稍快。EnumSet的性能最好的,就是有元素必须是同一个枚举类的局限性。这几个实现类都是线程不安全,同时访问需要自己保证Set集合的同步性。
List接口:List集合是一个元素有序、元素可以重复的集合,元素都有对应的索引值。
- void add(int index,Object element) // 将元素element插入到index索引处
- Object get(int index) //返回index索引出的元素
- int indexOf(Object o) //返回对象o在List中第一次出现的位置索引
- Object set(int index,Object element) //将index索引出的元素换成element
ArrayList实现类封装了一个动态的、允许再分配的Object[]数组。提供了两个方法重新分配Object[]数组。
void ensureCapacity(int minCapacity) //增大minCapacity大小的数组长度
void trimToSize() //调整集合的数组长度为当前元素的个数
ArrayList例子
public static void main(String[] args){
List<String> books=new ArrayList<>();
books.add(new String("第一本"));
books.add(new String("第二本"));
books.add(new String("第三本"));
books.add(new String("第四本"));
Iterator<String> it=books.iterator();
while(it.hasNext()){
String book=it.next();
System.out.println(book);
if(book.equals("第三本"))
{
it.remove();
}
}
System.out.println(books);
}
集合遍历问题
一、for循环遍历
public class CollectionTraversalFor {
public void forr(List<String> list){
for(int i=0;i<list.size();i++){
String book=list.get(i);
System.out.println(book);
}
}
}
二、foreach遍历
public class CollectionTraversalForeach {
public void Foreach(List<String> list){
for(String a :list){
System.out.println(a);
}
}
}
三、Iterator遍历
public class CollectionTraversalIterator {
public void iterator(List<String> list){
Iterator it=list.iterator();
while(it.hasNext()){
String book=(String) it.next();
System.out.println(book);
}
}
}
Map接口
Map集合用于保存具有映射关系的数据,有两组值,一组是key,另一组是value。
Hashmap 是一个 最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。
JAVA集合的更多相关文章
- Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结
2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...
- Scala集合和Java集合对应转换关系
作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 用Scala编码的时候,经常会遇到scala集合和Java集合互相转换的case,特意mark一 ...
- java集合你了解多少?
用了java集合这么久,还没有系统的研究过java的集合结构,今天亲自画了下类图,总算有所收获. 一.所有集合都实现了Iterable接口. Iterable接口中包含一个抽象方法:Iterator& ...
- 深入java集合学习1-集合框架浅析
前言 集合是一种数据结构,在编程中是非常重要的.好的程序就是好的数据结构+好的算法.java中为我们实现了曾经在大学学过的数据结构与算法中提到的一些数据结构.如顺序表,链表,栈和堆等.Java 集合框 ...
- Java集合框架List,Map,Set等全面介绍
Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I] +--java.util.ArrayList [C] +- ...
- Java集合框架练习-计算表达式的值
最近在看<算法>这本书,正好看到一个计算表达式的问题,于是就打算写一下,也正好熟悉一下Java集合框架的使用,大致测试了一下,没啥问题. import java.util.*; /* * ...
- 【集合框架】Java集合框架综述
一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...
- Java 集合框架
Java集合框架大致可以分为五个部分:List列表,Set集合.Map映射.迭代器.工具类 List 接口通常表示一个列表(数组.队列.链表 栈),其中的元素 可以重复 的是:ArrayList 和L ...
- Java集合概述
容器,是用来装东西的,在Java里,东西就是对象,而装对象并不是把真正的对象放进去,而是指保存对象的引用.要注意对象的引用和对象的关系,下面的例子说明了对象和对象引用的关系. String str = ...
- 深入java集合系列文章
搞懂java的相关集合实现原理,对技术上有很大的提高,网上有一系列文章对java中的集合做了深入的分析, 先转载记录下 深入Java集合学习系列 Java 集合系列目录(Category) HashM ...
随机推荐
- win10 下oracle tns通过IP无法访问的解决办法
在Oracle安装目录下\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN下找到listener.ora文件,编辑对应项为: LISTE ...
- yotaku的开发日志(1)
2015-12-18 21:17:46 连续看了几天的ThinkPHP框架,目前看到基于角色的用户访问权限控制. 相关代码如下: 数据库 用户表(管理员) mg_id mg_name mg_pwd m ...
- Android 照相 滤镜
android-image-filter 19种相片滤镜,使用也简单,all filters in file BitmapFilter.java : Bitmap newBitmap = Bitmap ...
- linux install mysql
sudo apt-get install mysql-server #此处会输入root的密码,设置的密码要记住 sudo apt-get install mysql-client sudo apt- ...
- 可变数组NSMutableArray
//创建一个空的可变数组 NSMutableArray *array = [NSMutableArray array]; //向数组里面添加对象 [array addObject:@"< ...
- shell命令获取最新文件的名称
最近有一个需求,在部署游戏战场服时,从程序包到部署需要做一些本地化的操作,手工操作费时费力,故写一个shell脚本,一键部署. 遇到的问题是每次要部署最新的程序包,因此需要shell命令获取最新的文件 ...
- matlab环境配置
一.环境变量设置 AMD处理器:右键单击我的电脑 属性 — >高级 —> 环境变量 —> 系统变量 —> 新建 变量名:BLAS_VERSION,值为安装目录\atlas_At ...
- Smart3D系列教程2之 《为什么三维重建效果这么差?——探探那些被忽略的拍照要求和技巧》
一.照片采集的实用概念 根据照片进行三维重建的过程中,有人没怎么遇到坑,有人被坑的不轻.可能是模型的纹理失真,模型的法线错了,模型会生成我们各种也想不到的结果,那么,是什么导致三维重建效果这么差的?是 ...
- AOP面向切面编程的四种实现
一.AOP(面向切面编程)的四种实现分别为最原始的经典AOP.代理工厂bean(ProxyFacteryBean)和默认自动代理DefaultAdvisorAutoProxyCreator以及Bea ...
- 一鼓作气 博客--第二篇 note2
1.循环正常结束是指没有中间截断,即没有执行break; for i in range(10) print(i) else: print("循环正常结束") 2.嵌套循环 for ...