java中Collection容器
1、容器(Collection)也称为集合, 在java中就是指对象的集合.
容器里存放的都只能是对象. 实际上是存放对象的指针(头部地址);
这里对于八种基本数据类型,在集合中实际存的是对应的包装类!
为什么要引出容器呢?java中的数组不是也能满足部分要求?
数组中元素类型必须一致;而且数组长度难以扩充,需要扩充的话,需要把原先的数组复制到一个新的数组,使用System.arraycopy();这样十分耗费CPU资源和内存空间
class A{
private int i;
public A(int i){
this.i = i;
}
public String toString(){
return "" + this.i;
}
}
public class Collect1{
public static void f(){
A[] arr_A = new A[10];
int i;
for(i = 0; i < 10; i++){
arr_A[i] = new A(i);
}
A[] arr_A2 = new A[11];
System.arraycopy(arr_A,0,arr_A2,0,10);
arr_A2[10] = new A(11);
for(i = 0; i < 11; i++){
System.out.println(arr_A2[i]);
}
}
}
2、容器的分类
01、集(Set)
Set相当于数学上的集合, Set中的所有元素是无序的, 而且不允许出现重复的元素.
02、列表(List)
List相当于代数里的队列, 列表的元素是有序的, 而且允许包含重复成员.
当然, 在java中List也可以分为数组列表(ArrayList)和链表(LinkedList), 它们两者的使用方法类似, 但是内存存储机制是不同的.
03、映射(Map)
Map保存所谓的'键值对'(Key - Value)信息, 映射中不能出现重复的键(key), 每个键最多只能映射一个值.
在java中, sun公司为上面三个容器类型设计了三个对应的接口(interface), 这个三个接口分别是 Set List Map.

由此看出, Java里的容器类是基于接口(interface)构建的.
* Collection 定义了存取一组对象的方法, 其子接口Set和List分别定义了存储方式.
* Map接口定义了存储(key-value)映射对的方法.
*常见的容器Vector, 其实Vector也是List容器一种, 但是Vector支持线程同步(里面的方法都是sycronized的), 也就是
允许多个线程同时操作1个Vector容器而不丢失数据.而Arraylist并不是同步的.
3、容器中常见的方法
容器作为1个类, 当然有若干个常用的成员方法, 为了叙述方便, 先介绍这一点.
3.1 int size(); 返回Collection中的元素个数.
3.2 boolean containsAll(collection c); 判断1个容器是否包含另1个容器的所有元素, 这里的元素指的的是对象的指针, 也就是对象的本身.
3.3 boolean add(Object e);
把1个对象添加到容器中, 这个方法是每种容器必有的方法.
3.4 boolean remove(Object e);
移除容器中首次出现的制定对象, 因为List容器根据次序不同允许存在重复的对象
3.5 get(int index);
获得容器中第index个元素, 这个方法在List容器中十分常用, 但是不并适用于Set容器, 因为Set容器的元素是无序的.
3.6 Iterator iterator();
一些无序的容器很难通过循环来遍历元素, 这时我们可以利用迭代器来遍历容器元素.
3.7 Object[] toArray();
容器不是数组, 不能用下标来访问容器的元素, 这个方法可以返回1个包含容器所有元素的数组.
3.8 重写容器元素的toString()方法
而println方法是输出对象的toString()方法. toString()方法在基类(Object)中被定义成输出对象的类名+hashcode().
而很多时候我们需要的是输出对象的其他有用信息(例如关键成员的值)
所以强烈建议:
为所有有可能放入容器的类重写toString()方法.
4、Collections
是容器的工具类,集合许多对容器进行复杂操作静态的方法
4.1 void sort(List);
对List容器内的元素排序, 前提是容器内元素的类已经实现Comparable 接口(可以比较的)
下一篇文章会详细提到.
4.2 void Shuffle(List);
对List容器的元素进行随机排序.
4.3 void reverst(List);
就是传说中的倒置, 队List容器内的元素进行逆排序, 一般没什么用..
4.4 void Fill(List,Object);
把容器内的所有元素都替换为1个制定对象(object)
4.5 void Copy(List dest,List src);
把容器src里的内容复制到dest容器
4.6 int bianrySearch(List,Object);
对于已排序的容器, 利用折半查找法找出制定对象,
5、有必要介绍Comparable接口
Collections类中包含很多对实现Collection接口的容器各种操作的静态方法.
当然, 其中最长用的莫过于排序了(Collections.sort(List l)
当我们自定义类实现排序时,报出java.lang.ClassCastException,只有实现Comparable接口,重写int compareTo(T o)
这个方法返回1个Int数值,
例如 i = x.compareTo(y)
如果i=0, 也表明对象x与y排位上是相等的(并非意味x.equals(y) = true, 但是jdk api上强烈建议这样处理)
如果返回数值i>0 则意味者, x > y啦,
反之若i<0则 意味x < y
下面是一个例子
import java.util.ArrayList;
import java.util.Collections; class Student implements Comparable{
private String name;
private int ranking; public Student(String name, int ranking){
this.name = name;
this.ranking = ranking;
} public String toString(){
return this.name + ":" + this.ranking;
} public int compareTo(Object o){
Student s = (Student)(o);
return this.ranking - s.ranking;
}
} public class Compare2{
public static void f(){
ArrayList arr = new ArrayList();
arr.add(new Student("Jack",10));
arr.add(new Student("Bill",23));
arr.add(new Student("Rudy",7)); System.out.println(arr);
Collections.sort(arr);
System.out.println(arr);
}
}
这时再编译执行, 就能见到List容器内的Student对象已经根据ranking来排序了.
[java] [Jack:10, Bill:23, Rudy:7]
[java] [Rudy:7, Jack:10, Bill:23]
参考:http://blog.csdn.net/nvd11/article/details/21516075
java中Collection容器的更多相关文章
- java中的容器问题
小小的总结一下java中的容器问题. 一.三个知识点 1.迭代器 1).java.util.Interator + hasnext(); next(); remove(); 2).java.lang. ...
- Java中的容器(集合)之ArrayList源码解析
1.ArrayList源码解析 源码解析: 如下源码来自JDK8(如需查看ArrayList扩容源码解析请跳转至<Java中的容器(集合)>第十条):. package java.util ...
- (转)Java中的容器详细总结
Java中的容器详细总结(编辑中) 原文链接:http://anxpp.com/index.php/archives/656/ 注:本文基于 Jdk1.8 编写 通常程序总是根据运行时才知道的某些条件 ...
- Java中的容器(集合)之HashMap源码解析
1.HashMap源码解析(JDK8) 基础原理: 对比上一篇<Java中的容器(集合)之ArrayList源码解析>而言,本篇只解析HashMap常用的核心方法的源码. HashMap是 ...
- java中Collection类及其子类
1:对象数组(掌握) (1)数组既可以存储基本数据类型,也可以存储引用类型.它存储引用类型的时候的数组就叫对象数组. 2:集合(Collection)(掌握) (1)集合的由来? 我们学习的是Java ...
- [转] Java中的容器
在书写程序的时候,我们常常需要对大量的对象引用进行管理.为了实现有效的归类管理,我们常常将同类的引用放置在同一数据容器中. 由于数据容器中存放了我们随时可能需要使用到的对象引用,所以一般的数据容器要都 ...
- JAVA中Collection接口和Map接口的主要实现类
Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些Collection允许相同的元素 ...
- Java中的容器和注入分析
为什么会出现容器的注入? 容器:顾名思义,装东西的器物. 至于spring中bean,aop,ioc等一些都只是实现的方式:具体容器哪些值得我们借鉴,我个人觉得是封装的思想.将你一个独立的系统功能放到 ...
- Java中Collection和Collections的区别(引用自:http://www.cnblogs.com/dashi/p/3597937.html)
1.java.util.Collection 是一个集合接口(集合类的一个顶级接口).它提供了对集合对象进行基本操作的通用接口方法.Collection接口在Java 类库中有很多具体的实现.Co ...
随机推荐
- How I Turned Down $300,000 from Microsoft to go Full-Time on GitHub
How I Turned Down $300,000 from Microsoft to go Full-Time on GitHub (我是如何拒绝微软30w的诱惑,专注于GitHub事业) 当我老 ...
- C标准中关于空指针的那些事
1 C标准不保证用所有二进制位都为0的变量来表示空指针,但它保证空指针与任何对象或函数的指针都不相等,取地址操作符&永远也不会返回空指针: 2 C标准称在指针上下文中的"值为0的整形 ...
- python3+django2 开发易语言网络验证(中)
第四步:网络验证的逻辑开发 1.将model注册到adminx.py中 1.在apps/yanzheng目录下新建admin.py 文件,添加代码: import xadmin from xadmin ...
- sql语句查询表中重复字段以及显示字段重复条数
今天跟大家分享两条SQL语句,是关于查询某表中重复字段以及显示该字段的重复条数. 1.select * from 表名 where 列名 in (select 列名 from 表名 group by ...
- ORACLE 博客文章目录
从接触ORACLE到深入学习,已有好几年了,虽然写的博客不多,质量也参差不齐,但是,它却是成长的历程的点点滴滴的一个见证,见证了我在这条路上的寻寻觅觅,朝圣的心路历程,现在将ORACLE方面的博客整理 ...
- 第15章-输入/输出 --- 理解Java的IO流
(一)理解Java的IO流 JAVA的IO流是实现输入/输出的基础,它可以方便地实现数据的输入/输出操作,在Java中把不同的输入/输出(键盘.文件.网络连接等)抽象表述为"流"( ...
- Hibernate中的对象有三种状态
Hibernate中的对象有三种状态: 瞬时状态 (Transient),持久状态 (Persistent), 1. 脱管状态 (Detached) 1. 1. 瞬时状态 (Transient) 由 ...
- vfd折腾(一)
从一开始驱动一块翻出来的液晶显示屏就想做一个电子时钟,偶然翻到了vfd(Vacuum Fluorescent Display的缩写,意为真空荧光显示屏). 此后就走上了不归路
- IsNullOrEmpty与IsNullOrWhiteSpace性能比较
IsNullOrEmpty与IsNullOrWhiteSpace性能谁比较高呢? 在string都是空字符串的情况下: IsNullOrWhiteSpace要比IsNullOrEmpty快大约 1~5 ...
- echarts实现中国地图数据展示
在项目中运用到图形展示数据太常见了,echarts是一款使用率非常高的插件工具,很多大平台都是使用echarts: 一般运用到条形.折线.扇形图,今天说一说在中国地图上展示各地数据: 首先要准备中国地 ...