java基础---类集框架一

来源:互联网 发布:windows snmp 软件 编辑:程序博客网 时间:2024/05/21 17:15


 

学习笔记 - collection、List、ArrayList 

一、collection简介 


 *   |--List:元素是有序的,元素可以重复,因为该集合体系有索引。
 *   |--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。可变长度数组。
 *   |--LinkedList:底层使用的是链表数据结构。特点:增删的速度很快,查询的速度很慢。
 *   |--Vector:底层使用的是数据结构;线程是同步的 ;被ArrayList替代了。1.0 。比较浪费空间
 *  
 *  |--Set:元素是无序的,元素不可以重复。 set:
 * 特有方法。凡是可以操作角标的方法都是该体系特有的方法。
 * 增:
 *   add(index,element);
 *   addAll(index,Collection);
 * 删:
 *   remove(index);
 * 改:
 *   set(index,element);
 * 查:
 *   get(index); subList(from,to);
 *
 * listIterator();

 

二、List使用简介
 *
 * List集合特有的迭代器。ListIterator是Iterator的子接口
 * 在遍历过程中进行增删改查
 *
 * 在迭代时,不可以通过集合对象的方法操作集合中的元素。
 * 因为会发生ConcurrentModificationExcepiton异常。
 *
 * 所以,在迭代器时,只能使用迭代器的方法操作元素,可是Iterator方法是有限的,
 * 只能对元素进行判断,取出,删除操作。
 * 如果想要其他的操作如:添加、修改等,就需要使用其子接口,ListIterator.
 *
 * 该接口只能通过List集合的listIterator 方法获取。

 

三、List使用示例

public class ListDemo {
 public static void main(String[] args) {
  method_1();
  method_2();

 }
 public static void method_2(){
  //演示列表迭代器
  ArrayList al = new ArrayList();

  // 1.添加元素。
  al.add("java1");
  al.add("java2");
  al.add("java3");
  al.add("java4");
  
  sop(al);
  
  //能用的原因:List下面都带有角标
  ListIterator li = al.listIterator();
  sop("hasNext:"+li.hasNext());
  sop("hasProviros:"+li.hasPrevious());
  while(li.hasNext()){
   Object obj = li.next();
   if(obj.equals("java2")){
//    li.add("java006");
    li.set("java002");
   }
   
  }
  sop("hasNext:"+li.hasNext());
  sop("hasProviros:"+li.hasPrevious());
  
  sop(al);
  
  while(li.hasPrevious()){
   sop(li.previous());
  }
  sop(al);
  //在迭代过程中,准备添加或者删除元素
  
  //对同一个集合同时进行添加和取出,会发生并发错误。
//  Iterator it = al.iterator();
//  while(it.hasNext()){
//   sop("next:"+it.next());
//   
//  }
  
  
 }
 
 public static void method_1(){
  ArrayList al = new ArrayList();

  // 1.添加元素。
  al.add("java1");
  al.add("java2");
  al.add("java3");
  al.add("java4");
  
  //在指定位置添加元素
  al.add(1,"java01");
  
  sop(al);
  
  //删除指定位置的元素
  al.remove(2);
  sop(al);
  
  //修改元素
  al.set(2, "java007");
  sop(al);
  
  //通过角标获取元素
  sop("get(1):"+al.get(1));
  
  sop(al);
  
  //获取所有元素
  for(int x = 0;x<al.size();x++){
   System.out.println(al.get(x));
  }
  
  Iterator it = al.iterator();
  while(it.hasNext()){
   sop(it.next());
   
  }
  
  //通过IndexOf获取对象的位置
  sop("index="+al.indexOf("java007"));
  
  List sub = al.subList(1, 3);
  sop(sub);
  
 }

 public static void sop(Object obj) {
  System.out.println(obj);
 }

 

四、LinkedList简介

 

* LinkedList特有方法: addFirst(); addLast();
 *
 * getFirst(); getLast();
 *获取元素但是不删除元素,如果集合中没有元素,会出现 NoSuchElementExcption
 *
 * removeFirst(); removeLast();
 * 获取元素但是删除元素,如果集合中没有元素,会出现 NoSuchElementExcption
 *
 *
 *
 * 在JDK1.6出现了替代方法。
 * offerFirst();添加元素
 * offerLast();
 *
 * peekFirst();
 * peekLast();
 * 获取元素但是不删除元素,如果集合中没有元素,会返回Null
 *
 * pollFirst();
 * pollLast();
 * 获取元素但是删除元素,如果集合中没有元素,会返回Null

 

五、LinkedList使用示例

 

public class LinkedListDemo {
 public static void main(String[] args) {

  method_1();
  method_2();
  
 }
 public static void method_2(){
  LinkedList link = new LinkedList();

  // 原因:将元素一个一个的添加到了头部
  link.addFirst("java1");
  link.addFirst("java2");
  link.addFirst("java3");
  link.addFirst("java4");
  // 原因:将元素一个一个的添加到了尾部
  link.addLast("java5");
  
  
  //没有这个元素异常 NoSuchElementExcption
  while(!link.isEmpty()){
   //删除最后一个元素
   sop(link.removeLast());
  }
  
 }

 public static void method_1() {
  LinkedList link = new LinkedList();

  // 原因:将元素一个一个的添加到了头部
  link.addFirst("java1");
  link.addFirst("java2");
  link.addFirst("java3");
  link.addFirst("java4");
  // 原因:将元素一个一个的添加到了尾部
  link.addLast("java5");

  sop(link);
  // 获取第一个元素
  sop(link.getFirst());

  // 获取最后一个元素
  sop(link.getLast());

  sop("删除第一个元素:" + link.removeFirst());
  sop(link.getFirst());
  sop(link.size());
 }

 public static void sop(Object obj) {
  System.out.println(obj);
 }
}

 

六、ArrayList使用示例

 

 * 将自定义对象作为元素存到ArrayList集合中,并去除重复元素。
  *
  * 比如:存人对象,同姓名同年龄,看做是同一个人。为重复元素。
  *
  * 思路:
  * 1,对人进行描述,将数据封装进入人对象。
  * 2,定义容器,将人存入。
  * 3,取出。
  *
  * List集合判断元素是否相同,依据的是元素的equals方法

 

public static void main(String[] args) {
  ArrayList a2 = new ArrayList();
  //判断元素是否相同,应该是用equals方法
  a2.add(new Person(11,"小王"));
  a2.add(new Person(22,"小李"));
  a2.add(new Person(11,"小王"));
  a2.add(new Person(33,"小票"));
  a2.add(new Person(44,"小妹"));
  
  a2 = singleArr(a2);
  
  Iterator it = a2.iterator();
  
  while(it.hasNext()){
   //需要向下转型
   Person p = (Person) it.next();
   sop(p.getName()+"......"+p.getAge());
  }
 
  sop("remove 小票:"+a2.remove(new Person(33, "小票")));
  
 
 }
 /**
  * 定义的临时的容器
  * @param a
  * @return
  */
 public static ArrayList singleArr(ArrayList a){
  //新建的ArrayList
  ArrayList arr = new ArrayList();
  //应该是传进来的对象使用迭代器
  Iterator it = a.iterator();
  while(it.hasNext()){
   Object obj = it.next();
   if(!arr.contains(obj))
    arr.add(obj); 
  }
  return arr;
  
 }
 public static void sop(Object obj){
  System.out.println(obj);
 }
}


/**
 * Person 类来自Object的equals方法,但是比较的是地址值
 * @author Administrator
 *
 */
class Person{
 private  int age;
 private String name;
 Person(int age,String name){
  this.age = age;
  this.name = name;
 }
 
 public boolean equals(Object obj){
  if(!(obj instanceof Person))
   return false;
  Person p = (Person) obj;
  
  System.out.println(this.name+"...."+p.name);
  System.out.println(this.age +"..."+p.age);
  
  return this.name.equals(p.name)&&this.age==p.age;  
 }
 
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 
}

 

0 0