- 浏览: 69183 次
- 性别:
- 来自: 杭州
文章分类
最新评论
集合是存储对象最常用的一种方式,数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。数据中可以存储基本数据类型,集合只能存储对象。集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。(其实,集合中能够存储的都是对象的引用或地址。)为什么会出现集合类呢?数据多了就封装成对象,对象多了也是需要存储的,然后集合类就出现了。集合框架:
Collection(根节点)
|--List:元素是有序的,元素是可以重复。因为该集合体系有索引。
|--ArrayList:底层的数据结构使用的是数组结构。特点:查询,修改操作简单,插入,删除操作复杂
|--LinkedList:底层的数据结构使用的是链表结构。特点:插入,删除操作简单,查询,修改操作复杂
|--Vector:底层是数组数据结构,Vector是同步的,ArrayList是不同步的。被ArrayList替代了。
|--Set:元素是无序的,元素不可以重复。
首先看一下Collection类,它里面有个add(Object o)方法,它的参数是Object,因此可以接受任何对象。除了add()以外还有其他一些方法,这里就省略不讲,一般容器都具备增删改查的特性。我们要看一下迭代器的概念。
什么是迭代器?其实就是集合的元素的取出方式。迭代器的特点:因为每个容器的底层的数据结构不一样,所以它们存取动作的实现方式可能就不一样。对于取出这个动作不足以用一个函数来描述,跟存(add()方法)不一样,它需要多个功能来体现。就把多个功能封装成一个对象。这个对象在容器内部。其实就是把取出方式定义在集合的内部,这样取出方式就可以直接访问集合内部的元素。即这个取出方式就被定义成了内部类。而每一个容器的数据结构不同,所以取出的动作细节也不一样,但是都有共性内容:判断和取出,那么可以将写共性抽取。那么这些内部类都符合一个规则。该规则是Iterator。如何获取集合的迭代对象呢?通过一个对外提供的方法:iterator()
//下面可以用更简洁的foreach替代 for (Iterator it = 集合.iterator(); it.hasNext(); ) { // do something with it }
接下来看一下Collection的子接口—— List: 它有一些特有的方法,凡是可以操作下标的方法都是该体系特有的方法。
增:add(index, element); addAll(int index, Collection collection);
删:remove(index);
改:set(index, element);
查:get(index); subList(fromIndex, toIndex); listIterator();
还可以通过indexOf()获取对象在集合中的位置。
ListIterator<E> extends Iterator<E>
List集合特有的迭代器。ListIterator是Iterator的子接口。在迭代时,不可以通过集合对象的方法操作集合中的元素。因为会发生ConcurrentModificationException异常。所以在迭代时,只能用迭代器的方法操作元素,可是Iterator方法是有限的(hasNext(),Next(),remove()),只能对元素进行判断,取出,删除的操作,如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。该接口只能同List集合的listIterator()方法获取。
List集合判断元素是否相同(例如判断集合中是否包含某个元素,又或者要移除集合中的某个元素,要先判断是否有该函数),依据的是元素的equals()方法,在本文最后面有个例程可以证明。
LinkedList的特有方法:
addFirst(); addLast();
getFirst(); getLast(); 获取元素,但不删除。如果集合中没有元素,会出现NoSuchElementException
removeFirst();removeLast();获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException
在JDK 1.6出现了替代方法:
offerFirst();offerLast();
peekFirst();peekLast();获取元素,但不删除。如果集合中没有元素,会返回null
pollFirst();pollLast();获取元素,但是元素被删除。如果集合中没有元素,会返回null
在List中还有就是Vector:Vector是比较浪费空间,枚举(Enumeration接口,它的功能和Iterator的功能是重复的)是Vector特有的取出方式。Vector已经被ArrayList替代了,前面也讲到了。
import java.util.ArrayList; import java.util.Iterator; class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } public String toString() { return "name: " + getName() + " age: " + getAge(); } //同名,同年龄就判断它们相同,如果下面这个方法不重写的话,下面代码中的remove()和contains()方法就不能起作用了。 public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (this.getClass() != obj.getClass()) return false; Person that = (Person) obj; return (this.age == that.age) && (this.name.equals(that.name)); } } public class ArrayListDemo { public static void main(String[] args) { ArrayList<Person> test = new ArrayList<Person>(); for (int i=0; i<5; i++) test.add(new Person("name" + i, i)); for (int i=0; i<5; i++) test.add(new Person("name" + i, i)); System.out.println("remove(): " + test.remove(new Person("name1", 1))); // 这里的remove()会调用集合元素中的equals()方法来判断 System.out.println("消除重复前:"); for (Person p: test) System.out.println(p); test = singleElement(test); System.out.println("消除重复后:"); for (Person p: test) { System.out.println(p); } } public static <E> ArrayList<E> singleElement(ArrayList<E> arrayList) { ArrayList<E> temp = new ArrayList<E>(); for (Iterator it = arrayList.iterator(); it.hasNext(); ) { // 在迭代时循环中next()调用一次,就要hasNext()判断一次 E element = (E) it.next(); if (!temp.contains(element)) { // 调用contains()会调用集合元素的equals()方法,remove()方法也是一样调用了集合元素的equals()方法 temp.add(element); } } /* for (E element: arrayList) { if (!temp.contains(element)) { temp.add(element); } } */ return temp; } }
发表评论
-
Java中的正则表达式学习笔记
2013-04-02 21:40 858关于正则表达式的定义可以看维基百科中的解释——正则 ... -
关于JVM的一些知识点
2013-03-26 14:22 738分享一篇介绍JVM的文章。 -
Java多线程学习
2013-03-26 10:27 0/* 开启三个子线程,id分别为0,1,2。写一个程序输出0 ... -
Java集合框架(3)
2012-12-06 19:27 713Map(和Collection<E> ... -
Java集合框架(2)
2012-12-06 19:17 947|--Set:元素是无序(存入 ... -
Java集合中迭代实现(foreach语句)
2012-12-06 12:29 1902对于集合的一个基本的操作利用foreach语句遍历集合以处 ... -
Java中如何重写equals()方法
2012-11-28 18:45 892/* 对于equals()的实现(重写,继承于Objec ... -
Java中关于引用类型的赋值
2012-11-28 10:07 0Assignment statements. An a ... -
Java多线程之生产者与消费者
2012-11-20 18:34 0生产者与消费者 -
String,StringBuffer和StringBuilder
2012-11-21 15:18 1233(1)String类用于描述字符串事物。它提供很多方 ... -
Java多线程(2)
2012-11-20 16:36 632... -
Java的字符流和字节流
2011-12-09 17:35 571IO分两种流字节流 InputStream OutputStr ... -
Windows下JDK环境变量配置
2012-11-17 21:44 771给下链接:http://docs.oracle.com/jav ... -
Java多线程(1)
2012-11-18 20:33 8291.首先我们明确一 ...
相关推荐
Java集合框架是Java编程语言中的一个核心组成部分,它为存储、管理和操作对象提供了一套统一的接口和类。本文将深入解析Java集合框架的各个方面,包括Collection、List、Set和Map,以及它们的相关实现和使用原理。 ...
6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6....
xmind格式的Java集合框架学习导图,包括Collection接口/Map接口以及具体实现类。 同样包含大厂面试题,也在导图中有所体现。 能学到什么: 更加成体系的知识框架,更加全面的、系统的知识。 思维导图: 思维导图具有...
综上所述,Java集合框架为处理各种数据集合提供了一套完整的解决方案。通过掌握这些接口和类的使用,开发者可以高效地编写出稳定和高质量的代码。在实际开发中,合理使用集合框架不仅可以提高程序的性能,还可以让...
### Java集合框架详解 #### 一、Java集合框架概述 Java集合框架是Java标准库的重要组成部分,它提供了存储和操作对象的各种数据结构。通过使用集合框架,开发人员可以轻松地管理不同类型的数据集,并且能够利用...
### Java集合框架总结 #### 一、Java集合框架概述 Java集合框架是Java标准库的一部分,它提供了一系列的接口和类来存储和操作各种类型的对象集合。这些接口和类遵循一致的设计模式,使得开发人员可以方便地管理和...
集合是将多个元素组成一个单元的...Java集合框架,为我们提供了一套性能优良、使用方便的接口和类,我们不必再重新发明轮子,只需学会如何使用它们,就可以处理实际应用中出现的问题了Java集合框架位于java.util包中
Java集合框架是Java编程语言中一个至关重要的组成部分,它提供了数据结构和算法的抽象,使得开发者可以方便地存储和管理各种类型的数据。本篇将详细探讨Java集合框架的基础知识,包括核心接口、类的层级结构以及Java...
面渣逆袭 Java 集合框架篇.pdf面渣逆袭 Java 集合框架篇.pdf面渣逆袭 Java 集合框架篇.pdf面渣逆袭 Java 集合框架篇.pdf面渣逆袭 Java 集合框架篇.pdf面渣逆袭 Java 集合框架篇.pdf面渣逆袭 Java 集合框架篇.pdf面渣...
JAVA学习 Java集合框架.ppt
Java集合框架是Java平台的核心部分,它为程序员提供了管理和操作对象的高效工具。这个框架主要由接口和类组成,它们都在`java.util`包中。集合框架的核心接口有两个:`Collection`和`Map`。 `Collection`接口是所有...
Java集合框架是Java编程语言中一个非常重要的组成部分,它提供了一组高效的数据结构和操作这些数据结构的方法。泛型则是Java在J2SE 5.0版本引入的一个特性,极大地提高了代码的类型安全性和可读性。下面我们将深入...
Java集合框架是Java编程语言中一个至关重要的组成部分,它为数据存储和操作提供了丰富的类库。泛型是Java 5引入的一项创新特性,极大地增强了集合框架的安全性和效率。本讲解将深入探讨这两个主题,以及与之相关的...
本文档为本人学习 java 集合框架期间的学习总结笔记,希望对新学习的朋友有所帮助和参考价值。本人java 开发时间不是太长,可能存在不完善或不对之处,欢迎指正!
一个扑克游戏,用于Java集合框架练习一个扑克游戏,用于Java集合框架练习 一个扑克游戏,用于Java集合框架练习一个扑克游戏,用于Java集合框架练习 一个扑克游戏,用于Java集合框架练习一个扑克游戏,用于Java集合...
Java集合框架是Java编程语言中的核心部分,它提供了一组高效、灵活的数据结构,使得开发者可以方便地存储和管理各种类型的数据。Java集合框架主要包括两大类:Collection和Map。 Collection接口是所有单值容器的父...
Java集合List集合Set集合Map集合Collection和collections工具类的框架图
List set ArraryList Map java集合框架笔记 基于Array的List,其实就是封装了Array所不具备的一些功能方便我们使用