欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

关于Java集合碎片的知识整理,java集合碎片

来源: javaer 分享于  点击 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);
 }
}


~~
相关栏目:

用户点评