黑马程序员 集合Collection 学习总结

——- android培训java培训、期待与您交流! ———-

每个人都离不开集体,人以群分,就好比一个个集合,我们都是其中的一个子类,继承父类并有自己的个性。我热爱我的热爱,并将继续坚持我的热爱,我会是那匹黑马。

一、集合综述

    所有集合类都位于java.util包下。集合中只能保存对象(保存对象的引用变量)。(数组既可以保存基本类型的数据也可以保存对象)。
   当我们把一个对象放入集合中后,系统会把所有集合元素都当成Object类的实例进行处理。从JDK1.5以后,这种状态得到了改进:可以使用泛型来限制集合里元素的类型,并让集合记住所有集合元素的类型(参见具体泛型的内容)。
   Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些接口或实现类。

Collection中定义了集合框架的共性功能:
Collection定义了集合框架的共性功能。

1,添加:add(e);addAll(collection);

2,删除:remove(e);removeAll(collection);clear();

3,判断:contains(e);isEmpty();

4,获取:iterator();size();

5,获取交集:retainAll();

6,集合变数组:toArray();
Set和List接口是Collection接口派生的两个子接口。
Map实现类用于保存具有映射关系的数据(key-value)。
Set、List和Map可以看做集合的三大类。
List集合是有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问。
Set集合是无序集合,集合中的元素不可以重复,访问集合中的元素只能根据元素本身来访问(也是不能集合里元素不允许重复的原因)。
Map集合中保存Key-value对形式的元素,访问时只能根据每项元素的key来访问其value。

 对于Set、List和Map三种集合,最常用的实现类分别是HashSet、ArrayList和HashMap三个实现类

二、List

1、List综述

元素是有序的,元素可以重复。因为该集合体系有索引。

ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢

LinkedList:底层使用的是链表数据结构。特点:增删速度很快,查询稍慢。

Vector:底层是数组数据结构。线程同步,被ArrayList替代。枚举名称以及方法的的名称过长。

2、程序解读

class
  CollectionDemo

{

public static void main(String[] args) 

{

method_get();

}

public static void method_get()

{

ArrayList al = new ArrayList();

//1,添加元素。

al.add("java01");//add(Object obj);

al.add("java02");

al.add("java03");

al.add("java04");

/*

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

while(it.hasNext())

{

sop(it.next());

}

*/

for(Iterator it = al.iterator(); it.hasNext() ; )

{

sop(it.next());

}

}

public static void vectorDemo()

{

Vector v = new Vector();

v.add("java01");

v.add("java02");

v.add("java03");

v.add("java04");

Enumeration en = v.elements();

while(en.hasMoreElements())

{

System.out.println(en.nextElement());

}

}

/*

LinkedList:特有方法

getFirst();

getLast();

removeFirst();

removeLast();

*/

public static void linkedListDemo()

{

LinkedList link = new LinkedList();

link.addLast("java01");

link.addLast("java02");

link.addLast("java03");

sop(link.getFirst());

sop(link.getLast());

sop(link);

sop("size="+link.size());

sop(link.removeFirst());

sop("size="+link.size());

}

/*

堆栈:先进后出,如同一个杯子

队列:先进先出,如同一个水管

*/

public static void sop(Object obj)

{

System.out.println(obj);

}

}  

三、Set

1,Set综述

Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。
HashSet:底层数据结构是哈希表,线程是非同步的。
HashSet是如何保证元素唯一性的呢?是通过hashCode和equals来完成的,如果元素的HashCode值相同,才会判断equals是否为true;HashCode值不同时,不会调用equals;

对于判断元素是否存在、以及删除等操作,依赖的方法是元素的HashCode和equals方法。

TreeSet: set集合的功能和collection 功能是一致的。可以对set集合中的元素排序。底层数据结构是二叉树;保证元素的唯一性的依据:compareTo 方法return 0;
TreeSet排序的第一种方式:让元素自身具备比较性。
元素需要实现Comparable接口,覆盖compareTo方法。
这种方式也成为元素的自然顺序,或者叫做默认顺序。
第二种排序方式:
当元素自身不具备比较性,或者具备的比较性不是所需要的。
这时需要让容器自身具备比较性。
自定义一个比较器,将比较器对象作为参数传递给TreeSet集合的结构函数,当两种排序同时存在时,以比较器为主。
定义比较器:定义一个类,实现Comparator 接口,覆盖compare方法。

2、程序解读

class SetDemo 
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args) 

{

//hashSetDemo();

treeSetDemo();

}

public static void hashSetDemo()
{
HashSet hs = new HashSet();
sop(hs.add("java01"));
sop(hs.add("java01"));
hs.add("java02");
hs.add("java03");
hs.add("java03");
hs.add("java04");
Iterator it = hs.iterator();
while(it.hasNext())
{
sop(it.next());
}
}

public static void treeSetDemo() 
{

TreeSet ts = new TreeSet();

ts.add(new Student("lisi02",22));

ts.add(new Student("lisi007",20));

ts.add(new Student("lisi09",19));

ts.add(new Student("lisi08",19));

//ts.add(new Student("lisi007",20));

//ts.add(new Student("lisi01",40));

Iterator it = ts.iterator();

while(it.hasNext())

{

Student stu = (Student)it.next();

System.out.println(stu.getName()+"..."+stu.getAge());

}

}

}

class Student implements Comparable//该接口强制让学生具备比较性。
{
private String name;
private int age;


Student(String name,int age)
{
this.name = name;
this.age = age;
}


public int compareTo(Object obj)
{


//return 0;

if(!(obj instanceof Student))
throw new RuntimeException("不是学生对象");
Student s = (Student)obj;


System.out.println(this.name+"....compareto....."+s.name);
if(this.age>s.age)
return 1;
if(this.age==s.age)
{
return this.name.compareTo(s.name);
}
return -1;
/**/
}


public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值