为了保存数量不确定的数据或者提供映射关系的数据,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集合的更多相关文章

  1. Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结

    2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...

  2. Scala集合和Java集合对应转换关系

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 用Scala编码的时候,经常会遇到scala集合和Java集合互相转换的case,特意mark一 ...

  3. java集合你了解多少?

    用了java集合这么久,还没有系统的研究过java的集合结构,今天亲自画了下类图,总算有所收获. 一.所有集合都实现了Iterable接口. Iterable接口中包含一个抽象方法:Iterator& ...

  4. 深入java集合学习1-集合框架浅析

    前言 集合是一种数据结构,在编程中是非常重要的.好的程序就是好的数据结构+好的算法.java中为我们实现了曾经在大学学过的数据结构与算法中提到的一些数据结构.如顺序表,链表,栈和堆等.Java 集合框 ...

  5. Java集合框架List,Map,Set等全面介绍

    Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I]   +--java.util.ArrayList [C]   +- ...

  6. Java集合框架练习-计算表达式的值

    最近在看<算法>这本书,正好看到一个计算表达式的问题,于是就打算写一下,也正好熟悉一下Java集合框架的使用,大致测试了一下,没啥问题. import java.util.*; /* * ...

  7. 【集合框架】Java集合框架综述

    一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...

  8. Java 集合框架

    Java集合框架大致可以分为五个部分:List列表,Set集合.Map映射.迭代器.工具类 List 接口通常表示一个列表(数组.队列.链表 栈),其中的元素 可以重复 的是:ArrayList 和L ...

  9. Java集合概述

    容器,是用来装东西的,在Java里,东西就是对象,而装对象并不是把真正的对象放进去,而是指保存对象的引用.要注意对象的引用和对象的关系,下面的例子说明了对象和对象引用的关系. String str = ...

  10. 深入java集合系列文章

    搞懂java的相关集合实现原理,对技术上有很大的提高,网上有一系列文章对java中的集合做了深入的分析, 先转载记录下 深入Java集合学习系列 Java 集合系列目录(Category) HashM ...

随机推荐

  1. css的padding

  2. Chrome 开发者工具(DevTools)中所有快捷方式列表

    Chrome DevTools提供了一些内置的快捷键,开发者利用这些快捷键可以节省常工作中很多日的开发时间.下面列出了每个快捷键在Windows/Linux及Mac中的对应键.其中一些快捷键对于Dev ...

  3. 【转载】64 位 Windows 内核虚拟地址空间布局(基于 X64 CPU)

    原文链接:http://shayi1983.blog.51cto.com/4681835/1734822 本文为原创翻译,原文出处为 http://www.codemachine.com/articl ...

  4. css 深入浅出定位

    前面我们简单的了解了盒子模型,这里我们就不复习了哈.有什么不清楚的去看我的上一篇博文.其实说定位之前大家一定要先理解一个东西:文档流,那什么是文档流?和文档有关系吗?是dom树吗? 这一对的问题我们应 ...

  5. RESTFUL Architecture

    Just review some articles about RESTFUL stuff, my understanding is RESTFUL is another more general v ...

  6. 安卓手机USB网络共享,电脑卡顿、反应慢

    1.首先需要把手机连接到电脑,在手机上打开USB网络共享. 2.打开设备管理器 3.在网络适配器中,找到Remote NDIS based Internet Sharing Device,右键更新驱动 ...

  7. 学习安装并配置前端自动化工具Gulp

    Gulp和所有Gulp插件都是基于nodeJs来运行的,因此在你的电脑上需要安装nodeJs,安装过程请移驾安装并配置前端自动化工具--grunt.安装完成后,通过运行cmd进入DOS命令窗口,如图: ...

  8. backbone新手填坑教程资源

    backbone 入门第二版 http://www.kancloud.cn/kancloud/backbonejs-learning-note/49379 backbone 入门讲解 http://w ...

  9. android——fargment基础

    1.Fragment的产生与介绍 Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视.针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后拷贝一份,修改布局以适应 ...

  10. 【noip】noip201503求和(市赛后公布)

    3. 求和 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 题目描述   一条狭长的纸带被均匀划分出了n个格子,格子编号从1到n.每个格子 ...