一、什么是集合?
举个例子:当你有很多书时,你会考虑买一个书柜,将你的书分门别类摆放进入。使用了书柜不仅仅使房间变得整洁,也便于以后使用书时方便查找。在计算机中管理对象亦是如此,当获得多个对象后,也需要一个容器将它们管理起来,这个容器就是集合。集合本质是基于某种数据结构数据容器。常见的数据结构:数组(Array)、集(Set)、队列(Queue)、链表(Linkedlist)、树(Tree)、堆(Heap)、栈(Stack)和映射(Map)等结构。下面便 一 .一 介绍:其中在两大接口中会有框架图,以方便大家学前、学后在大脑里可以形成一个思维导图,也方便大家检查自己对各各知识点的熟悉程度。 注意: 由于在集合中是有一个参数化类型的,所以在下面的代码里我会 指定成Object。为什么我要指定为Object呢?因为Java中的Object类是所有类的超类。 先涉及一下泛型的定义:集合类<参数化类型> 对象 =
new 集合类<参数化类型> (); 也可以先前往 四、泛型,了解U•ェ•*U
二、Collection接口
1、集合类中Collection接口的介绍
首先了解一下Collection接口是List、Set等接口的父接口。 先简单了解一下Collection接口的常用方法吧:
bollean add(Object obj) 向集合添加一个obj元素
void clear() 清空集合中所有元素
boolean isEmpty() 如果此集合为空,则返回turn
int size() 返回此集合中元素个数
如果想了解其他方法可以查询 Java基础类库(API) 这个是个好东西强烈推荐下面先看看例题演示上面的方法吧:
import java.util.*;
public class TestCollection{
public static void main(String[] args) {
Collection coll =newArrayList(); //创建集合
coll.add(1000); //添加集合
coll.add("phone");
System.out.println(coll); //打印集合coll
System.out.println(coll.size()); //打印集合长度
Collection coll2 =newHashSet();
coll2.add(1000);
coll2.add("phone");
System.out.println(coll2); //打印集合coll2
coll.clear(); //清空集合
System.out.println(coll.isEmpty()); //打印集合是否为空
}
}
输出的结果为:
[1000, phone]
2
[1000, phone]
true
需要注意的是,在用Collection创建集合时是以实现类ArrayList的实例和实现类HashSet的实例来当做Collection来使用的。
List接口
特点:List接口能够精确地控制每一个元素插入的位置,用户可以通过索引来访问集合中指定的元素,List还有一个特点就是元素的存入顺序与取出顺序相一致。
(1)、迭代器(vector)
既然我们已经存储了很多元素,并且也做到了增与删,但我们可不可以遍历打印所以元素呢? 迭代器(vector) 它可以
创建了bianli的对象后,可以这样使用迭代器(vector)
(2)、ArrayList实现类
其中ArrayList(效率高但线程不安全)是List的主要实现类,它是一个数组队列,相当于动态数组。虽然ArrayList的查询效率很高,非常适合做大量的查询操作,但不适合大量的增删操作,所以为了解决这一问题就添加了LinkedList实现类
(3)、LinkedList实现类
创建了LinkedList集合后,便可使用以下方法(想了解更多请查找JAVA基础类库):
void add(int index, Objecto) 将o插入索引为index的位置
void addFirst(Objecto) 将o插入集合的开头
void addLast(Objecto) 将o插入集合的结尾
ObjectremoveFirst() 删除并返回集合的第一个元素
ObjectremoveLast() 删除并返回集合的最后一个元素
LinkedList对增加和删除的操作高效且便捷
2、Set集合
Set集合中的元素是无序的、不可重复的。但这里的无序性不等于随机性,无序性指的是元素在底层存储位置是无序的。
Set
接口的主要实现类是HashSet和TreeSet。
(1)、HashSet集合
hashCode()
是算出一个值后,元素然后去找集合的位置,如果该位置没有元素,则直接存入;但如果该位置有元素,则用equals()来 判断是否相同,相同则不存储,否则在该位置上存储两个元素(一般不可能重复),所以在一个自定义的对象想正确存入HashSet集合时,那么应该重写自定义对象的 hashCode() 和 equals()方法。
(2)、TreeSet集合
TreeSet底层是用自平衡的排序二叉树实现的,所以它既能保证元素的唯一性,又可以对元素进行排序。
其中Tree有两种排序方法:自然排序(默认条件下)与定制排序。 默认排序便不多说,知道有一个方法compareTo(Object obj) 是用来比较元素之间的大小关系,例如:obj1.compareTo(obj2),若方法返回0,则相等;若方法返回正整数,则说明obj1大于obj2;若方法返回负整数,则说明obj1小于obj2.
而定制排序。。。。。emmmm其实就是继承了Comparator接口后,在自定义的子接口中实现一个campare方法,通过返回正负整数还有零,来进行排序, 从而可以达到降序排列等定制排序的目的。
Set集合中的元素是无序的、不可重复的。但这里的无序性不等于随机性,无序性指的是元素在底层存储位置是无序的。
网友评论