您的位置:首页 > 职场人生

黑马程序员------集合框架(Collection)

2015-06-03 16:51 295 查看
 ------- android培训java培训、期待与您交流!
----------

集合框架(Collection)
为什么出现集合类?
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。
数组和集合类同是容器,那么有何不同?
数组虽然也可以存储对象,但长度是固定的;集合长度是可变的,数组中可以存储基本数据类型,集合只能存储对象
集合类的特点:
集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。



集合框架为什么会出现这么多的容器呢?
因为每一个容器对数据的存储方式都有不同,这个存储方式称为:数据结构
集合的作用:

1.我们之前存储大量数据,可以使用数组:

数组的弊端:

1).要先期指定长度;

2).一旦指定长度,其长度不能改变;

2.Java为我们提供了大量的"集合类",供我们程序员使用;
3.这些"集合类"内部使用了不同的"数据结构"来存储对象;

它们有些:查询快;增删慢;

有些:查询慢;增删快;

有些:查询快;增删快;但是无序的;

所以要根据我们的需要选择不同的集合类;
集合框架的层次结构:
Collection(顶层接口):

|--List(接口):元素是有序的,元素可以重复,因为该集合体系有索引

|---ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快
|---LinkedList:底层使用的链表数据结构
|---Vector:底层是数组数据结构。线程同步,被ArrayList替代了
|--Set(接口):元素是无序的,元素不可以重复

|--HashSet(类):底层数据结构是哈希表;无序的,线程不安全的效率高;
|--TreeSet(类): 底层数据结构二叉树;排序的;线程不安全的,效率高;

创建一个集合容器,使用Collection接口的子类,ArrayList
ArrayList a1=new ArrayList();
ArrayList中的共性方法:
add()
向集合中添加元素
remove()
删除集合中的元素
clear()
清空集合中的元素
contains()
判断元素是否存在
isEmpty()
判断集合是否为空
size()
获取集合的长度
retailAll() 取交集

例如:al1. retailAll(al2):取交集,集合al1中只会保留和集合al2中相同的元素

add方法的参数类型是object。以便于接收任意类型对象

集合中存储的都是对象的引用(地址)

遍历取出集合中的所有元素: 就需要使用迭代器

什么是迭代器呢? 其实就是集合的取出元素的方式

Iterator it = a1.iterator(); 获取迭代器,用于取出集合中的元素

例子:
ArrayList a1=new ArrayList();
a1.add(“abcd1”);
a2.add(“abcd2”);
Iterator it = a1.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
List的特有的方法:凡是可以操作角标的方法都是该体系特有的方法
List:元素是有序的,元素可以重复,因为该集合体系有索引
增加元素:
add(index,element);
addAll(ndex,Collection);
删除元素:
remove(index);
修改元素:
set(index,element);
获取元素:
get(index);
subList(from,to);
listIterator();
list集合中判断元素是否相同,依据的是元素的equals方法
LinledList的特有方法:
添加元素:
addFirst();
addLast();
获取元素:
获取元素,但不删除元素,如果集合中没有元素
getFirst();
getLast();
获取元素,但是元素被删除
removeFirst();
removeLast();
Vector:枚举
枚举就是Vector特有的取出方式 并且枚举和迭代器很像

其实枚举和迭代是一样的,因为枚举的名称以及方法的名称都过长,所以被迭代器取代了

HashSet底层数据结构是哈希表;无序的,线程不安全的效率高;
HashSet是如何保证元素的唯一性呢?

是通过元素的两个方法,hashCode和equals来完成

如果元素的HashSet值相同,才会判断equals是否为true

如果元素的hashCode值不同,不会调用equals

注意:对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashCode和equals方法

TreeSet:底层数据结构是二叉树,可以对set集合中的元素进行排序

TreeSet保证元素唯一性的依据:

两种比较的方式:

1)让元素自身具备比较性。 元素需要实现comparable接口,

覆盖compareTo(Object obj)方法,这种方式也称为元素的自然顺序,

或者叫做默认顺序

2)当元素自身不具备比较性,或者具备的比较性不是所需要的这

需要让容器自身具备比较性,在初始化时,就有了比较的方式,

需要实现Comparator接口,重写compare()方法;

当两种排序都存在时,以比较器为主接口,覆盖compare()方法定义一个类,实现Comparator

Set集合的功能和collection是一致的

练习:往TreeSet集合中存储自定义对象学生,想按照学生的年龄进行排序
记住:排序时,当主要条件相同时,一定要判断一下次要条件
Import java.util.*;
class Student implements Comparable<Student>
{
private String name;
private int age;
Student(String name,int age)
{
this.name=name;
this.age=age;
}

public String getName()
{
return name;
}
public int getAge()
{
return age;
}
public int compareTo(Student s)
{

int num=new Integer(this.age).compareTo(new Integer(s.age));
if(num==0)
{
return this.name.compareTo(s.name);
}
return num;
}

}

class TreeDemo
{
public static void main(String[] args) throws Exception
{
TreeSet<Student> t=new TreeSet<Student>();

t.add(new Student("zhangsan",34));
t.add(new Student("zhangsan2",11));
t.add(new Student("zhangsan3",50));
t.add(new Student("zhangsan4",24));

Iterator<Student> it=t.iterator();

while(it.hasNext())
{
Student s=(Student)it.next();

System.out.println(s.getName()+"...."+s.getAge());
}
}
}

 -------
android培训java培训、期待与您交流!
----------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: