集合框架三大内容:对外的接口、接口的实现和对集合运算的算法

集合有三大类接口:List、Set、Map

共同点:都是集合接口,都可以用来存储很多对象

不同:Collection接口存储一组不唯一(允许重复)、无序的对象

  • Set接口继承自Collection接口,存储一组唯一(不允许重复)、无序的对象
  • List接口继承自Collection接口,存储一组不唯一(允许重复)、有序(以元素插入的次序来放置元素,不会重新排列)的对象。

Map接口存储一组成对的键-值对象,提供key(键)到value(值)的映射。Map中的key不要求有序,不允许重复,value同样不要求有序,但允许重复。

  • Iterator接口是负责定义访问和遍历元素的接口。

List接口的常用类有ArrayList和LinkedList。可以容纳所有类型的对象,包括null,允许重复,并保证元素的存储顺序。

ArrayList:在内存中分配连续的空间,优点在于遍历元素和随机访问元素的效率比较高。

Vector和ArrayList的不同

实现原理、功能相同

区别:Vector线程安全,ArrayList重速度轻安全,非安全

长度增长时Vector默认增长一倍,ArrayList增长一半

Hashtable和HashMap异同

相同:实现原理、功能相同

不同:Hashtable继承Dictionary类,HashMap实现Map接口

Hashtable安全,HashMap线程非安全

Hashtable不允许null值,HashMap允许null值5

ArrayList接口中定义的常用常用方法

方法名称

说明

boolean add(对象名)

在末尾顺序添加元素,从索引位置0开始

void add(下标位置,对象名)

在指定的索引位置添加元素,原索引位置及其后面的元素依此后移

集合名.size()

返回列表中元素的个数

Object get(下标)

返回指定索引位置处的元素

boolean contains(对象名)

判断列表中是否存在指定元素

集合名 remove(对象名)

从列表中删除元素

集合名 remove(下标)

从列表中删除指定位置元素,起始索引位置从0开始

LinkedList:采用链式存储方式,优点在于插入、删除元素时效率比较高,检索时速度慢。提供了addFirst()、addLast()、removeFirst()、removeLast()等方法,可以在首位进行插入或删除操作。使得LinkedList可被作为堆栈(stack)或队列(queue)。

LinkedList特殊方法

方法名称

说明

void addFirst(对象名)

在列表的首部添加元素

void addLast(对象名)

在列表末尾添加元素

Object getFirst()

返回列表中的第一个元素

Object getLast()

返回列表中的最后一个元素

Object removeFirst()

删除并返回列表中的第一个元素

Object removeLast()

删除并返回列表中的最后一个元素

Map接口存储一组成对的键-值对象,提供key(键)到value(值)的映射。

Map中的key不要求有序,不允许重复。

value不要求有序,允许重复。

常用Map实现类是HashMap,存储方式是哈希表,也称为散列表,根据(key value)直接进行访问。

存放记录的数组称为散列表。

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

boolean isEmpty()

若不存在键-值对映射关系,则返回true

void clear()

从此映射中移除所有的映射关系

遍历map几种方式

public static void main(String[] args) {

Map<String, String> map = new HashMap<String, String>();

map.put("1", "value1");

map.put("2", "value2");

map.put("3", "value3");

//第一种:普遍使用,二次取值

System.out.println("通过Map.keySet遍历key和value:");

for (String key : map.keySet()) {

System.out.println("key= "+ key + " and value= " + map.get(key));

}

//第二种

System.out.println("通过Map.entrySet使用iterator遍历key和value:");

Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();

while (it.hasNext()) {

Map.Entry<String, String> entry = it.next();

System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());

}

//第三种:推荐,尤其是容量大时

System.out.println("通过Map.entrySet遍历key和value");

for (Map.Entry<String, String> entry : map.entrySet()) {

System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());

}

//第四种

System.out.println("通过Map.values()遍历所有的value,但不能遍历key");

for (String v : map.values()) {

System.out.println("value= " + v);

}

}

迭代器Iterator

Iterator为集合而生,专门实现集合的遍历。隐藏各种集合实现类的内部细节。提供遍历结合的统一接口。

Collection接口的iterator()方法返回一个Iterator,然后通过Iterator接口的两个方法遍历

boolean hasNext():判断是否存在另一个可访问的元素

Object next():返回要访问的下一个元素

泛型集合

在创建对象时指定集合中元素的类型,从集合中取出元素时无须进行类型强制转换,并且如果把非指定类型对象放入集合,会出现编译错误。

List<E> 对象名=new ArrayList<E>();

如List<Dog> dogs = new ArrayList<Dog>();

Map<String,Dog> dogMap=new HashMap<String,Dog>();

Map<K,V> 对象名Map=new HashMap<K,V>();

包装常用构造方法

public Type(type value)

Type代表包装类,type代表基本类型。

一旦创建了某个包装对象,该对象所代表的值就不能改变了。

常用的类型转换

包装类->基本类型

public type typeValue()

字符串->基本类型

public static type parseType(String type)

JAVAOOP集合框架的更多相关文章

  1. 一起学 Java(三) 集合框架、数据结构、泛型

    一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...

  2. 【目录】JUC集合框架目录

    JUC集合框架的目录整理如下: 1. [JUC]JUC集合框架综述 2. [JUC]JDK1.8源码分析之ConcurrentHashMap(一) 3. [JUC]JDK1.8源码分析之Concurr ...

  3. java面试题——集合框架

    先来看一下集合框架关系图 Collection FrameWork 如下: Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └S ...

  4. 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 之 集合框架(JCF)

    1.集合框架 a.框架:为了实现某一目的或功能,而预先提供的一系列封装好的.具有继承或实现关系的类与集合 b.集合:①定义:Java中对一些数据结构和算法进行封装,即封装(集合也是一种对象) ②特点: ...

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

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

  9. 【集合框架】JDK1.8源码分析之Comparable && Comparator(九)

    一.前言 在Java集合框架里面,各种集合的操作很大程度上都离不开Comparable和Comparator,虽然它们与集合没有显示的关系,但是它们只有在集合里面的时候才能发挥最大的威力.下面是开始我 ...

随机推荐

  1. C# 一些零零碎碎的方法,都是些帮助类,留存,也希望能帮助到各位

    ---------------------------------------------------------------------------------------------------- ...

  2. IT相关术语、缩略词

    CLI Command Line Interface 命令行界面 GUI Graphical User Interface 图形用户界面 IP Internet Protocol 因特网协议 JDK ...

  3. mysql关键字执行顺序

    from on join where group by having select distinct union order by 昨天去58面试,之前的java基础和数据结构算法之类的都还可以,最后 ...

  4. 特殊的流程控制语句break continue exit

    break语句可以结束当前的for.foreach.while.do-while.或者switch的执行. for($i=1; $i<10; $i++) { if($i == 5) { echo ...

  5. 微信小程序实战篇:基于wxcharts.js绘制移动报表

    前言 微信小程序图表插件(wx-charts)是基于canvas绘制,体积小巧,支持图表类型饼图.线图.柱状图 .区域图等图表图形绘制,目前wx-charts是微信小程序图表插件中比较强大好使的一个. ...

  6. #include stdio.h(4)

    #include <stdio.h> int main() { //****************1.数组*************** //什么是数组:专门用来存放数据的 /* 格式 ...

  7. Windows server 2008 sp2 X64安装sharepoint2007出现兼容性问题无法安装 解决办法

    当你兴冲冲配置好了AD IIS .Net3.0.安装好了SQL2005,打完了sp3补丁,正准备点击sharepoint2007setup.exe安装的时候. 电脑却莫名奇妙提示了一个无法兼容的错误, ...

  8. Java Knowledge series 1

    Programming language evolves always along with Compiler's evolvement JVM as Additional Indirection I ...

  9. 【起航计划 018】2015 起航计划 Android APIDemo的魔鬼步伐 17 App->Alarm->Alarm Service

    Alarm Service和Alarm Controller 例子非常类似,只是Alarm Service是用来Schedule一个Service,而前面的例子是来Schedule一个Broadcas ...

  10. js&jquery:添加事件的三种方法和常用的一些事件

    一.添加事件的方法 1.EventTarget.addEventListener添加 获取事件目标元素,通过addEventListener函数添加 // Assuming myButton is a ...