Java集合类01

来源:互联网 发布:牛排做法 知乎 编辑:程序博客网 时间:2024/06/06 00:17

集合类

---为什么出现集合类?

         面向对象语言对事物的体现都是以对象的形式,所以为了方便对多

         个对象的操作,就需要存储对象,集合就是存储对象最常用的一

         种方式

---数组和集合类同是容器,有何不同?

         -数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。

         -数组中可以存储一类基本数据类型,集合只能存储对象但可以不同类型。

---集合类的特点

         集合只用于存储对象,集合长度是可变的,集合可以存储不同类型

         的对象。

程序示例

import java.util.*;//使用集合需要导入包

/*

1.add方法的参数类型是Object,以便接收任意类型的对象

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

3.迭代器(Iterator)是获取集合中元素的一种方式

*/

class CollectionDemo

{

         publicstatic void main(String[] args)

         {

                   method_get();

         }

         publicstatic void method_get()

         {

                   //迭代器演示

                   ArrayListarrlist1 = new ArrayList();

                   arrlist1.add("zhaoyanli");

                   arrlist1.add("zhaoxiaoleng");

                   arrlist1.add("huanhuan");

                   for(Iteratoriter = arrlist1.iterator(); iter.hasNext(); )//对内存优化好!

                   {

                            System.out.println(iter.next());

                   }

         }

         publicstatic void method_2()

         {

                   //两个集合的操作

                  ArrayList arrlist1 = new ArrayList();

                   arrlist1.add("zhaoyanli");

                   arrlist1.add("huanhuan");

                   arrlist1.add("beibeimama");

 

                   ArrayListarrlist2 = new ArrayList();

                   arrlist2.add("huanhuan");

                   arrlist2.add("henaihenai");

                   //arrlist1.retainAll(arrlist2);//只保留arrlist1中两集合的交集            

                   arrlist1.removeAll(arrlist2);//去掉arrlist1中两集合的交集

                   System.out.println("arrlist1:"+arrlist1);

                   System.out.println("arrlist2:"+arrlist2);

         }

         publicstatic void method_1()

         {

                   //创建一个集合容器,使用Collection接口的子类ArrayList

                   ArrayListarrlist = new ArrayList();

                   //添加元素(对象)

                   arrlist.add("xiafan");

                   arrlist.add("love");

                   arrlist.add("huanhuan");

                   arrlist.add("2012050807021226");

                   //删除集合元素

                   arrlist.remove("love");

                   //判断元素存在

                   System.out.println("huanhuan在吗:"+arrlist.contains("huanhuan"));

                   System.out.println("新集合:"+arrlist);

                   //清空集合

                   //arrlist.clear();

                   //获取集合长度

                   System.out.println("size:"+arrlist.size());

         }

}

List

---List:元素师有序的,元素可以重复,因为该机和体系有索引。

         ---ArrayList:底层使用的是数组结构。特点:查询快,增删慢,线程不同步

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

         ---Vector:底层使用数组结构,线程同步,被ArrayList替代了

列表迭代器

因为Collection中有iterator方法,所以每一个子类集合对象都具备迭代器。

List集合特有的迭代器 ListIterator Iterator的子接口

在迭代时,不可以通过集合对象的方法操作集合中的元素,因为会发生异常。

我们采用的解决方案是,使用 Lsit集合的 listIterator()方法获取

程序示例ArrayList

import java.util.*;

public class ListDemo

{

         publicstatic void main(String[] args)

         {

                   ArrayListarrlist = new ArrayList();

                   arrlist.add("xiafan");

                   arrlist.add("love");

                   arrlist.add("huanhuan");

                   //在指定位置增加元素

                   arrlist.add(1,"beibei");

                   System.out.println(arrlist);

                   //删除指定位置元素

                   //arrlist.remove(0);

                   //System.out.println(arrlist);

                   //替代指定位置的元素

                   arrlist.set(3,"zhaoxiaoleng");

                   System.out.println(arrlist);

                   //返回指定位置的元素

                   for(inti = 0; i < arrlist.size(); i++)

                   {

                            System.out.println("arrlist["+i+"]="+arrlist.get(i));

                   }

                   /*

                   列表迭代器获取元素方式

                   for(Iteratoriter = arrlist.iterator(); iter.hasNext();)

                   {

                            System.out.println(iter.next());

                   }

                   */

                   //通过indexOf获取对象的位置

                   System.out.println("zhaoxiaolengindex = " + arrlist.indexOf("zhaoxiaoleng"));

                   //获取子列表

                   Listsublist  = arrlist.subList(2, 4);//包含头,不包含尾

                   System.out.println("sublist= " + sublist);

         }

}

程序示例LinkedList:

importjava.util.*;

class MyQueue//队列

{

       private LinkedList linkList;

       MyQueue()

       {

              linkList = new LinkedList();

       }

       public void myAdd(Object obj)

       {

              linkList.offerLast(obj);//添加

       }

       public Object myGet()//返回对象

       {

              //return linkList.peekFirst();返回

              return linkList.pollFirst();//删除元素(返回)

       }

       public boolean isNull()

       {

              return linkList.isEmpty();

       }

}

class MyStack//

{

       private LinkedList linkList;

       MyStack()

       {

              linkList = new LinkedList();

       }

       public void myAdd(Object obj)

       {

              linkList.offerLast(obj);

       }

       public Object myGet()//返回对象

       {

              return linkList.pollLast();

       }

       public boolean isNull()

       {

              return linkList.isEmpty();

       }

}

public classLinkedListDemo

{

       public static void main(String[] args)

       {

              MyStack stack = new MyStack();

              stack.myAdd("huanhuan");

              stack.myAdd("beibei");

              stack.myAdd("fanfan");

              while(!stack.isNull())

              {

                     System.out.println(stack.myGet());

              }

       }

       public static void linkedListMethod()

       {

              LinkedList linkList = newLinkedList();

              linkList.addFirst("zhaoyanli");

              linkList.addFirst("zhaoxiaoleng");

              linkList.addFirst("huanhuan");

              System.out.println(linkList);

              System.out.println(linkList.getLast());

              System.out.println(linkList.removeFirst());

              System.out.println(linkList);

       }

}

练习

/*

将自定义对象作为元素存到ArrayList集合中,并去除重复元素

比如:存放人对象。同姓名同年龄,视为同一个人。

*/

importjava.util.*;

class Person

{

       private String name;

       private int age;

       Person(String name, int age)

       {

              this.name = name;

              this.age = age;

       }

       public boolean equals(Object obj)//自动调用该方法

       {

              if(!(obj instanceof Person))

                     return false;

              Person p = (Person)obj;//向下转型,因为Object类中无该equals方法

              //System.out.println(this.name+"------"+p.name);//打印每次比较的情况

              return (this.name.equals(p.name))&& (this.age == p.age);

       }

       public String getName()

       {

              return name;

       }

       public int getAge()

       {

              return age;

       }

}

public classArrayListTest2

{

       public static ArrayListsingleElement(ArrayList arrList)//去重复元素方法

       {

              ArrayList tempList = newArrayList();//定义临时容器

              for(Iterator iter =arrList.iterator(); iter.hasNext(); )

              {

                     Object obj = iter.next();

                     if(!tempList.contains(obj))

                            tempList.add(obj);

              }

              return tempList;

       }

       public static void main(String[] args)

       {

              ArrayList arrList = newArrayList();

              arrList.add(newPerson("huanhuan", 22));

              arrList.add(newPerson("xiaoleng", 22));

              arrList.add(newPerson("huanhuan", 21));

              arrList.add(newPerson("huanhuan", 22));

              arrList.add(newPerson("xiaoleng", 22));

             

              arrList = singleElement(arrList);

 

              for(Iterator iter =arrList.iterator(); iter.hasNext(); )

              {

                     Person pers =(Person)iter.next();//向下转型

                     System.out.println(pers.getName()+"-----"+pers.getAge());

              }

       }

}

Set

---Set:元素是无序(存入和取出的顺序不一定一致)的,元素不可以重复

         ---HashSet:底层使用的数据结构是哈希表

                   HashSet是如何保证元素唯一性的?

                   通过元素的两个方法,hashCode()equals()。如果hashCode值相同,会

                   调用equals方法,若hashCode值不同,不会调用equals

                   注意,判断元素是否存在及删除等操作,依据的是元素的hashCodeequals方法

程序示例:

importjava.util.*;

class Person

{

       private String name;

       private int age;

       Person(String name, int age)

       {

              this.name = name;

              this.age = age;

       }

       public int hashCode()

       {

              return name.hashCode()+age*22;//哈希地址的计算方法,

                                                               //hashCode()字符串中定义了此方法

       }

       public boolean equals(Object obj)

       {

              Person per = (Person)obj;

              if(!(per instanceof Person))//注意写法

                     return false;

              return(per.name.equals(this.name)) && (per.age== this.age);

       }

       public String getName()

       {

              return name;

       }

       public int getAge()

       {

              return age;

       }

}

public class HashSetDemo

{

       /*

       public static void hashDemo_basic()

       {

              HashSet hashSet = new HashSet();

 

              hashSet.add("huanhuan");

              hashSet.add("fanfan");

              hashSet.add("beibei");

 

              for(Iterator iter =hashSet.iterator(); iter.hasNext(); )

              {

                     System.out.println("----->"+ iter.next());

              }

       }

       */

       public static void hashDemo_advanced()

       {

              HashSet hashSet = new HashSet();

              hashSet.add(newPerson("fanfan", 23));

              hashSet.add(newPerson("huanhuan", 22));

              hashSet.add(newPerson("huanhuan", 22));

              hashSet.add(newPerson("beibei", 1));

              for(Iterator iter =hashSet.iterator(); iter.hasNext(); )

              {

                     Person p =(Person)iter.next();//向下转型

                     System.out.println(p.getName()+"::"+p.getAge());

              }

              //System.out.println("ourbaby:"+hashSet.remove(new Person("beibei", 1)));

       }

       public static void main(String[] args)

       {

              //hashDemo();

              hashDemo_advanced();

       }

}

 

原创粉丝点击