集合:可以存储不同类型的多个对象,随着存储对象的个数的增加而自动扩大容量
体系结构:
Collection<E>
|----List:存入的对象是有序的,且可以重复
ArrayList:底层使用的数据结构是数组,线程不安全的,查找速度快,增删速度慢
Vector:底层使用的数据结构是数组,线程安全的,查找速度快,增删速度慢
LinkedList:底层使用的数据结构是链表,线程不安全的,查找速度慢,增删速度快
|----Set:存入的对象是无序的,且不可以重复
HashSet:底层使用的数据结构是哈希表,线程不安全的
保证对象唯一的原理:
先判断hashCode()值,如果都不同就直接加入集合,如果哈希值相同了
在调用equals()方法,如果equals()方法返回值为true,则认为集合中存在该对象,不加入集合
TreeSet:底层使用的数据结构是二叉树,线程不安全的
会对存入集合的对象进行排序
保证集合中对象唯一的方式:依据compareTo()或compare()的返回值是否为0
排序方式一:让存入集合中的对象具备可比较性
让存入集合中的对象所属的类实现Comparable<T>接口中的intcompareTo(T t) 方法
排序方式二:让集合具备排序功能
定义一个比较器,实现Comparator<T>接口中的int compare(T t1,T t2)方法
把比较器对象作为参数传递给TreeSet<E>集合的构造方法
当集合中的对象具备可比较性,且存在比较器时,比较器优先被使用
泛型:<引用数据类型>
把运行时期的问题转移到了编译时期
不用再强制类型转换
classDemo<T>
{
publicvoid show(T t)
{ }
//自己使用泛型的方法
public<E> void fun(E e)
{
}
//静态方法只能自己使用泛型
publicstatic <W> void func(W w)
{}
}
//泛型定义在接口上
interfaceinter<T>
{ }
通配符:?
泛型限定:?extends E 和? super E
Map<K,V>:一个单独的接口,存储的是键值对,键不可以重复,无序的
HashMap:保证键唯一的原理和HashSet一样,hashCode(),equals()
TreeMap:TreeMap是根据键来排序的,保证键唯一的原理和TreeSet相同,依据
compareTo()或compare()的返回值是否为0,为0就认为是重复键
Map的迭代方式有两种:
第一种:
Set<K> keys =map.keySet();
Iterator<K> ite = keys.iterator();
while(ite.hasNext())
{
K key = ite.next();
V value = map.get(key);
System.out.println(key+","+value);
}
第二种:
Set<Map.Entry<K,V>> entry = map.entrySet();
Iterator<Map.Entry<K,V>> ite = entry.iterator();
while(ite.hasNext())
{
Map.Entry<K,V> en = ite.next();
K key = en.getKey();
V value = en.getValue();
System.out.println(key+","+value);
}
工具类:Arrays
Collections
举例说明:
/*
Collection
List:存储的对象是有序的(取出的顺序和存储的顺序是一致的),对象是可以重复的
--ArrayList:底层使用的数据结构是数组,查找速度快,增删速度慢 线程不同步的
--LinkedList:底层使用的数据结构是链表,查找速度慢,增删速度快 线程不同步的
--Vector:底层使用的数据结构是数组,线程同步的
Set:存储的对象是无序的(取出的顺序和存储的顺序是不一致的),对象不可以重复
*/
import java.util.*; class Demo1 { public static void main(String[] args) { ArrayList list = new ArrayList(); list.add("java01"); list.add("java02"); list.add("java03"); list.add("java03"); list.add("java02"); Iterator ite = list.iterator(); while(ite.hasNext()) { sop(ite.next()); } ArrayList list2 = quChu(list); sop(list2); } //去除集合中的重复元素 public static ArrayList quChu(ArrayList list) { ArrayList list2 = new ArrayList(); for(int i=0;i<list.size();i++) { Object obj = list.get(i); if(!list2.contains(obj))//依据什么来判断是否包含这个对象?boolean equals(Object obj) { list2.add(obj); } } return list2; } public static void sop(Object obj) { System.out.println(obj); } }
/*TreeSet:保证集合中对象唯一的方式:依据compareTo()或compare()的返回值是否为0
排序方式一:让存入集合中的对象具备可比较性
让存入集合中的对象所属的类实现Comparable<T>接口中的intcompareTo(T t) 方法
排序方式二:让集合具备排序功能
定义一个比较器,实现Comparator<T>接口中的int compare(T t1,T t2)方法
把比较器对象作为参数传递给TreeSet<E>集合的构造方法
当集合中的对象具备可比较性,且存在比较器时,比较器优先被使用*/
举例说明:
package com.demo.day07; import java.util.Comparator; import java.util.Iterator; import java.util.TreeSet; public class Demo8 { public static void main(String[] arg) { ComparaByName comparaByName=new ComparaByName(); TreeSet ts=new TreeSet(comparaByName); // ts.add("sa"); // ts.add("assa"); // ts.add("esa"); // ts.add("fsa"); ts.add(new People("zs",22)); ts.add(new People("ls",28)); ts.add(new People("wm",22)); ts.add(new People("tt",23)); Iterator ite=ts.iterator(); while(ite.hasNext()) { sop(ite.next()); } } public static void sop(Object obj) { System.out.println(obj); } } @SuppressWarnings("rawtypes") class ComparaByName implements Comparator//<span style="font-weight: bold;">排序方式二</span> { @Override public int compare(Object arg0, Object arg1) { if(!(arg0 instanceof People)) throw new ClassCastException("类型不对"); if(!(arg1 instanceof People)) throw new ClassCastException("类型不对"); People per1=(People)arg0; People per2=(People)arg1; int num=per1.getName().compareTo(per2.getName()); return num==0?per1.getAge()-per2.getAge():num; } } class People implements Comparable//<span style="font-weight: bold;">排序方式一</span> { private String name; private int age; @Override public int compareTo(Object obj) { if(!(obj instanceof People)) throw new ClassCastException("类型不对"); People per=(People)obj; int num=this.age-per.age; return num==0?this.name.compareTo(per.name):num; } public People() { super(); // TODO Auto-generated constructor stub } public People(String name, int age) { super(); this.name = name; this.age = age; } @Override public String toString() { return "People [name=" + name + ", age=" + age + "]"; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
原文地址:http://blog.csdn.net/u011007829/article/details/43239703