关于Java集合碎片的知识整理,java集合碎片
分享于 点击 37918 次 点评:184
关于Java集合碎片的知识整理,java集合碎片
首先简单了解下Vector
public static void main(String[] args){ Vector vector = new Vector(); vector.add("2"); vector.add("4"); vector.add("6"); vector.add("8"); vector.add("10"); System.out.println(vector); //遍历时用到枚举器(类似迭代器) //先创建一个枚举器: Enumeration enumeration = vector.elements(); while(enumeration.hasMoreElements()){ Object object = (Object)enumeration.nextElement(); System.out.println("V元素"+object); } }
再简单了解下LinkedList
public static void main(String[] args){ LinkedList linkedList = new LinkedList<>(); linkedList.add("Dog"); linkedList.addFirst("fish"); linkedList.addLast("person"); linkedList.add("cat"); System.out.println(linkedList); System.out.println(linkedList.getFirst());//得到第一个元素 System.out.println(linkedList.removeFirst());//会输出删除的元素 System.out.println(linkedList);//验证一下 System.out.println(linkedList.pollFirst());//若不存在返回null //简单介绍以上方法 }
List集合排列是有序的可重复的:
// public static void main(String[] args){ ArrayList list = new ArrayList<>(); list.add("stu1"); list.add("stu1"); list.add("stu3"); list.add("stu4"); list.add("stu5"); System.out.println(list);//输出 stu1 stu1 stu3 stu4 stu5 重复的并没有做处理 ArrayList list1 = new ArrayList<>(); Iterator iterator = list1.iterator(); while(iterator.hasNext()){ Object object = (Object)iterator.next(); //在比较过程中调用了equals方法 //第二个元素.equals("stu1")=true if(!list1.contains(object)){//若判断成立 说明list1不包含object元素 list1.add(object); } } System.out.println(list1); }
我们再看看如何将类对象存入List并实现去重
public class Test{ public static void main(String[] args){ ArrayList list = new ArrayList<>(); list.add(new Dog("wxp",11)); list.add(new Dog("wxp",11)); list.add(new Dog("wxp",12)); list.add(new Dog("wxp",13)); System.out.println(list); ArrayList list1 = new ArrayList<>(); //创建迭代器 Iterator iterator = list.iterator(); while(iterator.hasNext()){ Object object = (Object)iterator.next(); if(!list1.contains(object)){ list1.add(object); } } System.out.println(list1); } } //创建一个Dog类 class Dog{ String name; int age; public Dog(String name,int age){ super(); this.name = name; this.age = age; } public String toString(){ return "Dog [name=" + name + ", age=" + age + "]"; } //重写一下equals方法 public boolean equals(Object obj){ if(!(obj instanceof Dog)){ throw new ClassCastException(); } Dog dog = (Dog)object; return this.name==dog.name && this.age.equals(dog.age); } }
*练习下:
创建一个类:狗类 属性:姓名 (年龄创建一个集合保存三个狗对象,第一个:小拉 第二个:小哈 第三个:小美 分别根据年龄和姓名去重)*
public class Test{ public static void main(String[] args){ ArrayList list = new ArrayList<>(); list.add(new Dog("小拉",12)); list.add(new Dog("小哈",13)); list.add(new Dog("小美",14)); System.out.println(list); //创建一个接受去重的集合 ArrayList list1 = new ArrayList<>(); 创建迭代器 进行遍历 Iterator iterator = list.iterator(); while(iterator.hasNext()){ Object object = (Object)iterator.next(); if(!list1.contains(object)){ list1.add(object); } } System.out.println(list1); } } class Dog{ String name; int age; public Dog(String name,int age){ super(); this.name = name; this.age = age; } public String toString() { return "Dog [name=" + name + ", age=" + age + "]";//将对象内存地址转为字符串输出 } public boolean equals(Object obj){//重写equals方法 if(!(obj instanceof Dog)){ throw new ClassCastException(); } //向下转型 Dog dog = (dog)obj; return this.name==dog.name && this.age.equals(dog.age);//年龄 姓名共同比较 } }
*Set是无序的并且是不可重复的
HashSet如何实现不重复的:
* 是通过调用元素内部的hashCode和equals方法实现的去重 首先调用hashCode方法 比较两个元素的哈希值 如果哈希值不同就认为是两个对象,不再去调用equals方法 如果哈希值相同 再去调用equals方法比较 返回true认为是一个对象,返回false,认为是两个对象。
来看个栗子*
public class Test{ public static void main(String[] args){ HashSet set = new HashSet<>(); set.add("stu1"); set.add("stu2"); set.add("stu3"); set.add("stu3"); set.add("stu4"); set.add("stu5"); System.out.println(set);//[stu4, stu5, stu2, stu3, stu1] HashSet set1 = new HashSet<>(); //在add()内部实现去重的功能 默认调用Cat类内的hashCode()方法和equals()方法实现去重 set.add(new Cat("Tom",1)); set.add(new Cat("jerry",2)); set.add(new Cat("lucy",3)); set.add(new Cat("jerry",2)); System.out.println(set1);//[Cat [name=Tom,age=1], Cat [name=jerry,age=2], Cat [name=lucy,age=3]] } } class Cat{ String name; int age; public Cat(String name,int age){ super(); this.name = name; this.age = age; } public String toString(){ return "Cat [name=" + name + ",age=" + age + "]"; } public int hashCode(){ return name.hashCode()+age*1000;//这里age*1000是为了减少重复的几率 } public boolean equals(Object obj){ if(!(obj instanceof Cat)){ throw new ClassCastException(); } //向下转型 Cat cat = (Cat)obj; return this.name==cat.name && this.age.equals(cat.age); } } ~~
用户点评