Java--集合Collection

Collection:集合,用于存储对象的,对对象进行增删等操作,定义了集合框架的共性内容

    --List:元素是有序的,元素可以重合,该体系结构有索引
          --ArrayList:底层的数据结构是数组结构,元素有索引;查询很快,增删稍慢,线程不同步
          --LinkedList:底层的数据结构是链表结构;增删速度很快,查询速度不快,线程不同步
          --Vector:底层是数组数据结构,查询,增删都很慢,效率低,已经被ArrayList取代;但线程同步
   
    --Set :元素是无序的(存入和取出的顺序不一致),元素不可以重复
        --HashSet:底层数据结构是哈希表,线程是不同步的,不安全
        --TreeSet:底层的数据结构是二叉树结构
   
  HashSet是如何保持数据的不重复性?
   通过元素的两个方法,equals()和hashCode(),首先集合判断元素的hashCode是否相同,如果相同则再判断
   equals();相同则不加入集合,不相同则加入;如果首先判断的hashCode不相同,则equals则不会去判断
   所以如果元素这个类是自己写的则要覆写以上两个方法,否则系统调用的将是Object类中的
   hashCode和equals两个方法,这样将会导致无法判定两个自己写的元素是否是相同的
   
  TreeSet是如何实现数据的排序?
    有两种实现方式:
   TreeSet排序的第一种方式:让元素自身具备比较性。
    元素需要实现Comparable接口,覆盖compareTo方法。
    也种方式也成为元素的自然顺序,或者叫做默认顺序。

   TreeSet的第二种排序方式
    当元素自身不具备比较性时,或者具备的比较性不是所需要的。
    这时就需要让集合自身具备比较性;集合自身覆盖comparator接口
    集合自身实现compare方法,在集合初始化时,就有了比较方式
  
   
 Collection定义了集合框架的共性,是所有集合的父类
 1.增加元素
  add(Object e):添加一个元素,这个元素可以是任何的类型,所以是Object类型
  addAll(Collection e):添加所有的元素
 2.删除元素
  remove(Object e):移除一个元素
  removeAll(Collection e ):移除一个collection子类对象中的所有元素
  clear():清空所有元素
 3.判断元素
  contains(Object e):判断集合中是否包含e这个元素
  containsAll(Collection e):判断集合中是否包含e这个集合
  isEmpty():判断集合是否是空
 4.获取元素
  iterator():获取所在类的迭代器,就是取出集合中元素的方法
    注意:iterator()是所有集合所共有的,在迭代时不可以通过集合对象中的方法操作集合中的元素,会发生异常
  只能对元素进行判断,取出,删除的操作
  size():获取元素的个数
 
 
 List中特有的方法:凡是可以操作角标的方法都是该体系中特有的方法
 1.添加元素
  add(index,element):根据角标添加元素
  addAll(index,Collection):根据角标添加一个集合中的元素
 2.删除元素
  remove(index):根据角标删除元素
 3.修改元素
  set(index,element):根据角标修改元素
 4.查询元素(获取元素)
  get(index):根据角标查询元素
  subList(from,to):
  listIterator():List特有的迭代器
  int indexOf(obj):获取指定元素的位置
 5.List集合特有的迭代器ListIterator
  ListIterator是Iterator的子接口,Iterator迭代只能对元素进行判断,取出,删除的操作,如果要想对元素进
  行修改就需要使用其子接口ListIterator来实现
  
  
 
 LinkedList特有的方法
 1.addFist():从集合的开头添加元素
   addLast():从集合的结尾添加元素
 
 2.getFirst():获取集合开头的元素,但不删除,如果没有元素则会出现NoSuchElementException
   getLast():获取集合结尾的元素,不删除,如果集合没有元素则会出现NoSuchElementException
   JDK1.6以后出现的替代方法
   peekFirst();
      peekLast();
      获取元素,但不删除元素,如果集合中没有元素,会返回null。
 
 3.removeFirst():
      removeLast():
      获取元素,但是元素被删除,如果集合中没有元素,会出现NoSuchElementException
   JDK1.6以后出现替代方法
   pollFirst();
      pollLast();
   获取元素,但是元素被删除,如果集合中没有元素,会返回null。

 
 集合的一些技巧:
     需要唯一嘛?
           需要:Set
                需要制定顺序嘛?
                    需要:TreeSet
                    不需要:HashSet
                     想要一个和存储一到处的顺序(有序):LinkedHashSet
          不需要:List
                  需要频繁增删嘛?
                     需要:LinkedList
                     不需要:ArrayList
   

  List
      --ArrayList
      --LinkedList
      --Vector
  Set
      --HashSet
      --TreeSet
      --LinkedHashSet


后缀名就是集合所属的体系,前缀名就是该集合的数据结构

看到array:就要想到数组,查询快,有角标
看到link:就要想到链表,增删快,就要想到add get remove+first last
看到hash:就要到哈希表,想到唯一性,想到元素需要覆盖hashCode方法和equals方法
看到tree就要想到二叉树,就要想到有序,想到两个接口Comparable,Comparator
而且这些常用的集合容器都是不同步的  


//List集合实现向集合中加入数据并输出
import java.util.*;
class Person {
 public String name;
 public int age;
 Person(String name,int age){
  this.name=name;
  this.age=age;
 }
 public String getName(){
  return this.name;
 }
 public int getAge(){
  return this.age;
 }
}
public class ConList{
 public static void main(String[] args){
  //创建集合
  List<Person> lt=new LinkedList<Person>();
  //向集合中增加元素
  lt.add(new Person("lidaouf",21));
  lt.add(new Person("李道福",23));
  lt.add(new Person("LIDAOFU",24));
  lt.add(new Person("AFU",24));
  lt.add(new Person("SBUTHPYG",26));
  lt.add(new Person("道福",20));
  //取迭代器
  Iterator<Person> it=lt.iterator();
  //取元素
  while(it.hasNext()){
   Person p=it.next();
   System.out.println(p.getName()+":"+p.getAge());
  }
 }

}


 
/*TreeSet集合实现向集合中加入元素并输出
 为了实现TreeSet集合中元素的唯一性,程序要实现comparable接口中的compareTo方法
*/
import java.util.*;
class Person implements Comparable{
 private String name;
 public int age;
 Person(String name,int age){
  this.name=name;
  this.age=age;
 }
 public String getName(){
  return this.name;
 }
 public int getAge(){
  return this.age;
 }
 public int compareTo(Object p1){
  Person p=(Person)p1;

  int temp=this.age-p.age;
  return (temp==0) ? (this.name.compareTo(p.name)): temp;
 }
}
public class ConList{
 public static void main(String[] args){
  //创建集合
  TreeSet<Person> lt=new TreeSet<Person>();
  //向集合中增加元素
  lt.add(new Person("lidaouf",21));
  lt.add(new Person("李道福",23));
  lt.add(new Person("LIDAOFU",24));
  lt.add(new Person("AFU",24));
  lt.add(new Person("SBUTHPYG",26));
  lt.add(new Person("道福",20));
  //取迭代器
  Iterator<Person> it=lt.iterator();
  //取元素
  while(it.hasNext()){
   Person p=it.next();
   System.out.println(p.getName()+":"+p.getAge());
  }
 }

}
 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值