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 ...
随机推荐
- VIew-CoordinatorLayout 笔记
CoordinatorLayout 协调者:一般会是两个控件,一个Dependency一个child ,CoordinatorLayout的主要功能就是协调这两个控件,使child跟随Dependen ...
- iOS 面试题搜集
1.#import和#include的区别,@class代表什么? 2.浅拷贝和深拷贝区别是什么? 3.Objective-C中类别和类扩展的区别? 4.Objective-C堆和栈的区别? 5.内存 ...
- iterm2
Mac下配置iterm2 http://www.dreamxu.com/mac-terminal/ 快捷键 http://cnbin.github.io/blog/2015/06/20/iterm2- ...
- 最大流-最小割 MAXFLOW-MINCUT ISAP
简单的叙述就不必了. 对于一个图,我们要找最大流,对于基于增广路径的算法,首先必须要建立反向边. 反向边的正确性: 我努力查找了许多资料,都没有找到理论上关于反向边正确性的证明. 但事实上,我们不难理 ...
- 【异常】INFO: TopologyManager: EndpointListener changed ...
5月份做云部署,在调试CSS系统时,出现启动系统时,卡死情况,后台日志如下: May 03, 2016 2:34:52 AM org.apache.cxf.dosgi.topologymanager. ...
- tungsten抽取和应用mysql binlog
首先举例说明 api的基本使用方式 首先进行配置 , 可以看到源数据库和目的数据库 TungstenProperties tp=new TungstenProperties(); tp.setStri ...
- spring3.0使用annotation完全代替XML(三)
很久之前写过两篇博客: spring3.0使用annotation完全代替XML spring3.0使用annotation完全代替XML(续) 用java config来代替XML,当时还遗留下一些 ...
- C#委托与事件的简单使用
前言:上一篇博文从原理和定义的角度介绍了C#的委托和事件.本文通过一个简单的小故事,来说明C#委托与事件的使用方法及其方便之处. 在阅读本文之前,需要你对委托和事件的基本概念有所了解.如果你是初次接触 ...
- 步骤进度条 css
用css写一个简单的步骤进度条 html代码: <h4>南京游玩</h4> <ul class="step-list"> <li> ...
- oracle遍历表更新另一个表(一对多)
declare cursor cur_test is select t.txt_desig, m.segment_id, s.code_type_direct, case when s.uom_dis ...