集合Collection

集合

因为容器中数据结构不同。容器有很多种,不断的共性功能抽取,形成了集合体系-->集合框架称之为collection接口

集合框架

Collection接口中的共性功能

1.添加

Boolean add(Object obj);一次添加一个

Boolean addAll(Collection c);将制定容器中的所有元素添加

2.删除

void clear();

boolean remove(object o);

boolean remove(collection c);

3.获取长度

int size();

4.判断

boolean isEmpty();

boolean contains(Object o)

boolean containsAll(Collection c)

5.将集合转成数组

toArray()

toArray([]);

6.取出集合元素

Iterator   iterator[]

迭代:获取集合中元素迭代功能的迭代器对象,是取出元素的一种方式

有没有啊?有!取一个,还有没有啊?没有,算了。

迭代器:具备迭代功能的对象

迭代器对象不需要new,直接通过iterator()方法获取即可

迭代器是取出collection集合中元素的公共方法

Collection

|--List:有序(存入的顺序和取出的顺序一致)有索引 使用频率非常高

|--Set

重点list接口中的方法:它的特有方法是围绕着索引定义的

支持增删改查

增:

add(index,element)

删:

remove(index)

set(index , new element)

indexOf(element);

根据某一元素获取其位置

List集合的具体子类。子类之所以区分是因为内部的数据结构(存储数据的方式)不同

|---Vector:数据结构是数组。数组是可变长度的(不断new新数组并将新数组元素复制到新数组)增删和查询都慢!

|---ArrayList:也是数组结构,也是长度可变的,线程是不同步的,替代了Vector。增删速度不快。查询速度很快

|--LinkedList:链表结构,线程是不同步的。增删速度很快。查询速度较慢

LinkedList : 特殊的方法

Set集合:不允许重复元素,和Collection的方法相同。Set集合中取出元素的方法只有一个:迭代器

|--HashSet:哈希表结构,如何保证唯一性?元素必须覆盖HashCode和equals方法

覆盖HashCode方法是根据元素自身的特点确定哈希值,覆盖equals方法是为了解决哈希值冲突。

如何保证元素唯一性?

参考的就是比较方法的返回值是否为零,是,就是重复元素,否则不是

|--TreeSet:可以对元素进行排序,二叉树数据结构,非同步的。排序方式:需要元素具备比较功能,所以元素需要实现Comparable接口

技巧:jdk以后出现的集合框架中的常用子类对象,存在的规律。前缀名是数据结构名,后缀名是数据结构,后缀名是所属体系名

ArrayList:数据结构。看到数组,就知道查询快,看到list,就知道可以重复,可以增删改查

LinkedList:链表结构,增删快, xxxFirst xxxLast  xxx:add get move

HashSet:哈希表,查询速度更快,不保证有序。看到sec就知道不可以重复

LinkedHashSet:链表+哈希表。可以实现有序,因为有链表

TreeSet:二叉树,可以排序。就想要两种比较方式:一种是自然排序Compareable,一种是比较器CompareTo

泛型:

在jdk1.4版本以前,容器什么类型的对象都可以存储,但是在取出时,需要用到对象的特有内容,需要做向下转型,但是对象的类型不一致,导致了向下转型发生了classCastException异常

为了避免这个问题,只能主观上控制,往集合中存储的对象类型保持一致

Jdk1.5以后解决了该问题,在定义集合时,就直接明确集合中元素的具体类型

这样编译器在编译时,就可以对集合中存储的对象类型进行检查。一旦发现类型不匹配,就编译失败,这个技术就是泛型技术

好处:

1.将运行时期的问题转移到了编译时期,可以更好的让程序员发现问题并解决问题

2.避免了向下转型问题

总结

泛型就是应用在编译时期的一项安全机制

泛型的擦除

编译器通过泛型对元素类型进行检查,只要检查过,就会生成class文件,但在class文件就将泛型标识去掉了

泛型的表现:泛型技术在集合框架中应用的范围很大

什么时候需要泛型呢?1.只要看到类,或者接口在描述时右边定义<>就需要泛型。其实是容器在不明确操作元素的类型的情况下,对外提供了一个参数<>

使用容器时,只要将具体的类型实参传递给参数即可

说白了,泛型就是,传递类型参数。

Map:双列集合,一次存一对,键值对。要保证键的唯一性

共性的功能:

1.添加

V put(key.value)

putAll

2.删除  void clear();

3.判断

boolean  contiansKey(object)

boolean  contiansValue(object)

4.获取

V get(key)

Map

|--Hashtable:哈希表,是同步的,不允许null键,null值。

|--HashMap: 哈希表,是不同步的,允许null键,null值。

|--TreeMap: 二叉树,不同步的。可以对map集合中的键进行排序。

练习:

学生对象(姓名,年龄)都有对应的归属地。

key=Student  value=String.

1,

将学生和归属存储到HashMap集合中并取出。

同姓名同年龄视为同一个学生。

2,

按照学生的年龄进行升序排序并取出。

按照学生的姓名进行升序排序并取出。

集合

因为容器中数据结构不同。容器有很多种,不断的共性功能抽取,形成了集合体系-->集合框架称之为collection接口

集合框架

Collection接口中的共性功能

1.添加

Boolean add(Object obj);一次添加一个

Boolean addAll(Collection c);将制定容器中的所有元素添加

2.删除

void clear();

boolean remove(object o);

boolean remove(collection c);

3.获取长度

int size();

4.判断

boolean isEmpty();

boolean contains(Object o)

boolean containsAll(Collection c)

5.将集合转成数组

toArray()

toArray([]);

6.取出集合元素

Iterator   iterator[]

迭代:获取集合中元素迭代功能的迭代器对象,是取出元素的一种方式

有没有啊?有!取一个,还有没有啊?没有,算了。

迭代器:具备迭代功能的对象

迭代器对象不需要new,直接通过iterator()方法获取即可

迭代器是取出collection集合中元素的公共方法

Collection

|--List:有序(存入的顺序和取出的顺序一致)有索引 使用频率非常高

|--Set

重点list接口中的方法:它的特有方法是围绕着索引定义的

支持增删改查

增:

add(index,element)

删:

remove(index)

set(index , new element)

indexOf(element);

根据某一元素获取其位置

List集合的具体子类。子类之所以区分是因为内部的数据结构(存储数据的方式)不同

|---Vector:数据结构是数组。数组是可变长度的(不断new新数组并将新数组元素复制到新数组)增删和查询都慢!

|---ArrayList:也是数组结构,也是长度可变的,线程是不同步的,替代了Vector。增删速度不快。查询速度很快

|--LinkedList:链表结构,线程是不同步的。增删速度很快。查询速度较慢

LinkedList : 特殊的方法

Set集合:不允许重复元素,和Collection的方法相同。Set集合中取出元素的方法只有一个:迭代器

|--HashSet:哈希表结构,如何保证唯一性?元素必须覆盖HashCode和equals方法

覆盖HashCode方法是根据元素自身的特点确定哈希值,覆盖equals方法是为了解决哈希值冲突。

如何保证元素唯一性?

参考的就是比较方法的返回值是否为零,是,就是重复元素,否则不是

|--TreeSet:可以对元素进行排序,二叉树数据结构,非同步的。排序方式:需要元素具备比较功能,所以元素需要实现Comparable接口

技巧:jdk以后出现的集合框架中的常用子类对象,存在的规律。前缀名是数据结构名,后缀名是数据结构,后缀名是所属体系名

ArrayList:数据结构。看到数组,就知道查询快,看到list,就知道可以重复,可以增删改查

LinkedList:链表结构,增删快, xxxFirst xxxLast  xxx:add get move

HashSet:哈希表,查询速度更快,不保证有序。看到sec就知道不可以重复

LinkedHashSet:链表+哈希表。可以实现有序,因为有链表

TreeSet:二叉树,可以排序。就想要两种比较方式:一种是自然排序Compareable,一种是比较器CompareTo

泛型:

在jdk1.4版本以前,容器什么类型的对象都可以存储,但是在取出时,需要用到对象的特有内容,需要做向下转型,但是对象的类型不一致,导致了向下转型发生了classCastException异常

为了避免这个问题,只能主观上控制,往集合中存储的对象类型保持一致

Jdk1.5以后解决了该问题,在定义集合时,就直接明确集合中元素的具体类型

这样编译器在编译时,就可以对集合中存储的对象类型进行检查。一旦发现类型不匹配,就编译失败,这个技术就是泛型技术

好处:

1.将运行时期的问题转移到了编译时期,可以更好的让程序员发现问题并解决问题

2.避免了向下转型问题

总结

泛型就是应用在编译时期的一项安全机制

泛型的擦除

编译器通过泛型对元素类型进行检查,只要检查过,就会生成class文件,但在class文件就将泛型标识去掉了

泛型的表现:泛型技术在集合框架中应用的范围很大

什么时候需要泛型呢?1.只要看到类,或者接口在描述时右边定义<>就需要泛型。其实是容器在不明确操作元素的类型的情况下,对外提供了一个参数<>

使用容器时,只要将具体的类型实参传递给参数即可

说白了,泛型就是,传递类型参数。

Map:双列集合,一次存一对,键值对。要保证键的唯一性

共性的功能:

1.添加

V put(key.value)

putAll

2.删除  void clear();

3.判断

boolean  contiansKey(object)

boolean  contiansValue(object)

4.获取

V get(key)

Map

|--Hashtable:哈希表,是同步的,不允许null键,null值。

|--HashMap: 哈希表,是不同步的,允许null键,null值。

|--TreeMap: 二叉树,不同步的。可以对map集合中的键进行排序。

练习:

学生对象(姓名,年龄)都有对应的归属地。

key=Student  value=String.

1,

将学生和归属存储到HashMap集合中并取出。

同姓名同年龄视为同一个学生。

2,

按照学生的年龄进行升序排序并取出。

按照学生的姓名进行升序排序并取出。

时间: 2024-10-13 01:47:50

集合Collection的相关文章

java集合Collection接口

collection集合 Map集合 Collection接口 Collection接口是List.Set和Queue接口的父接口,该接口里定义的方法既可用于操作Set集合,也可用于操作List和Queue集Collection提供了大量添加.删除.访问的方法来访问集合元素.主要的方法如下:

使用数据集(DataSet)、数据表(DataTable)、集合(Collection)传递数据

数据集(DataSet).数据表(DataTable).集合(Collection)概念是.NET FrameWork里提供数据类型,在应用程序编程过程中会经常使用其来作为数据的载体,属于ADO.NET的一部分.今天我们WCF分布式开发步步为赢第8节的内容:使用数据集(DataSet).数据表(DataTable).集合(Collection)传递数据.本节内容除了介绍几个类型概念外的,同样会详细给出代码的实现过程.此外我们会分析这几种数据类型的优势和缺点,以及在面向对象的服务开发过程中如何解决

黑马程序员——java基础——集合(Collection)

 黑马程序员--java基础--集合(Collection) ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 集合框架的构成及分类,如下图: 1.为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 2.数组和集合类同是容器,有何不同? 数组虽然也可以存储对象,但长度是固定的:集合长度是可变的.数组中可以存储基本数据类型,集合只能存储对象. 3.

在含有null值的复杂类的集合(Collection)中取最大值

在日常编程中,经常遇到要在一组复杂类的集合(Collection)中做比较.取最大值或最小值. 举个最简单的例子,我们要在一个如下结构的集合中选取包含最大值的元素: public class Class<T> where T : struct { public T? Value { get; set; } } var ints = new List<Class<int>>() { new Class<int>() { Value = 2 }, new Cla

java基础(五)--- 集合collection

集合 collection: Collection 层次结构中的根接口: Collection的功能概述: * 1:添加功能 * boolean add(Object obj):添加一个元素 * boolean addAll(Collection c):添加一个集合的元素 * 2:删除功能 * void clear():移除所有元素 * boolean remove(Object o):移除一个元素 * 3:判断功能 * boolean contains(Object o):判断集合中是否包含指

Java集合 - Collection

Ref:http://blog.csdn.net/liulin_good/article/details/6213815  http://www.cnblogs.com/averey/p/4306166.html 一.java.util.Iterator<E>接口 迭代器 1 package java.util; 2 3 public interface Iterator<E>{ 4 // Return true iteration has more elements 5 bool

java之集合Collection 3个例子

package cn.itcast_01; import java.util.ArrayList; import java.util.Collection; /* * 集合的由来: * 我们学习的是面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们就必须把这多个对象进行存储. * 而要想存储多个对象,就不能是一个基本的变量,而应该是一个容器类型的变量,在我们目前所学过的知识里面,有哪些是容器类型的呢? * 数组和StringBuffer.但是呢?Strin

Java基础集合Collection Map的概述

概述: 1,jse-collection分类,主要讲解Collection和Map接口的子类及其接口和相关工具类(不含线程安全的集合类). 2,本节介绍一下整体集合框架的结构图. 一.关于java集合涉及到的基本数据结构和算法的理论(这里试试简单的给大家一些参考). 数组(Array),在中间位置插入.删除效率低下,但是按位置索引查找快.链(Linked),在中间位置插入.删除效率高,按位置索引查找效率低下.树.散列. ---------------集合(Set),无序.不重复的原始集合.列表(

集合——Collection

为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,Java就提供了集合类. 数组和集合类同是容器,有何不同? 数组虽然也可以存储对象,但长度是固定的:集合长度是可变的.数组中可以存储基本数据类型,集合只能存储对象. 集合类的特点: 集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象. Collection接口概述(它是一个接口,不是对象): 是Collection层次结构中的根接口. Collection 表示一组对象,这些对象也称为 co