22.集合

来源:互联网 发布:指针数组初始化为null 编辑:程序博客网 时间:2024/05/16 07:38

1.Java集合主要有三种重要的类型:

   list:是一个有序的集合,可以放重复的数据

   set:是一个无序的集合,不允许放重复的数据

   map:是一个无序的集合,集合中包含一个键对象,一个值对象,键对象不允许重复,值对象可以重复

2.集合的继承结构图

 (Collection部分)


(Map部分)


3.单向链表


4.双向链表



5.collection集合

import java.util.*;public class HelloWorld {public static void main(String[] args) throws Exception{//创建集合Collection c = new ArrayList();//多态//添加元素(collection集合只能存储单个元素,并且只能存储引用类型)c.add(1);//JDK5.0之后,自动装箱  1成为StringCustomer cus =new Customer("JACK",20);c.add(cus);c.add(3.14);c.add(false);//获取元素个数System.out.println(c.size());//清空元素个数//c.clear();//迭代,遍历//获取迭代器对象Iterator it = c.iterator();//迭代器是面向接口编程                          //it是引用,保存内存地址//System.out.println(it);//java.util.ArrayList$Itr@15db9742//开始调用方法,完成迭代,遍历while(it.hasNext()) { //调用it.next()方法之前必须调用it.hasNext();Object element = it.next();System.out.println(element);}//判断集合中是否包含某个元素System.out.println(c.contains(3.14));//true  contains方法底层调用equals方法 //删除元素c.remove(3.14);}}class Customer{String name;int age;Customer(String name, int age){this.name = name;this.age = age;}}
   
6.remove和contains方法都需要集合中的元素重写equals方法,
因为Object中的equals方法比较内存地址,在现实业务逻辑中,不能比较
内存地址,该比较内容

(contains)

import java.util.*;public class HelloWorld {public static void main(String[] args) {//创建集合Collection c = new ArrayList();//创建Integer类型的对象Integer i1 = new Integer(10);//添加元素c.add(i1);//判断集合中是否包含i1System.out.println(c.contains(i1));//true//创建Integer类型的对象Integer i2 = new Integer(10);//contains方法底层调用equals方法System.out.println(c.contains(i2));//trueManager m1 = new Manager(100,"gyc");c.add(m1);Manager m2 = new Manager(100,"gyc");System.out.println(c.contains(m2));//false  Manager没有重写equals方法,需要重写//所以Mananager中调用的是Object中的equals方法,和“==”作用一样,只会比内存地址}}class  Manager{int num;String name;Manager(int num, String name){this.num = num;this.name = name;}//重写equals方法public boolean equals(Object o) {if(this == o)return true;if(o instanceof Manager) {Manager m = (Manager)o;if(m.num == this.num && m.name.equals(this.name)) {return true;}}return false;}}

(remove)

package test;/*remove和contains方法都需要集合中的元素重写equals方法,因为Object中的equals方法比较内存地址,在现实业务逻辑中,不能比较内存地址,该比较内容  */import java.util.*;public class HelloWorld {public static void main(String[] args) {//创建集合Collection c = new ArrayList();//创建Integer类型的对象Integer i1 = new Integer(10);//添加元素c.add(i1);//创建Integer类型的对象Integer i2 = new Integer(10);//删除c.remove(i2);//contains方法底层调用equals方法System.out.println(c.size());//0Manager m1 = new Manager(100,"gyc");c.add(m1);Manager m2 = new Manager(100,"gyc");c.remove(m2);System.out.println(c.size());//0}}class  Manager{int num;String name;Manager(int num, String name){this.num = num;this.name = name;}//重写equals方法public boolean equals(Object o) {if(this == o)return true;if(o instanceof Manager) {Manager m = (Manager)o;if(m.num == this.num && m.name.equals(this.name)) {return true;}}return false;}}


7.深入remove

package test;/*深入remove方法  */import java.util.*;public class HelloWorld {public static void main(String[] args) {Collection c  = new ArrayList();c.add(1);c.add(2);c.add(3);//遍历Iterator it  = c.iterator();while(it.hasNext()) {//推荐使用迭代器自身带的remove方法删除元素it.next();//删除it.remove();//通过迭代器删除/*//使用集合自身所带的remove方法删除,不推荐,会报错Object element = it.next();//删除c.remove(element);*/ }}}



原创粉丝点击