A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 牛德阳 中级黑马   /  2015-12-26 23:02  /  455 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

List:元素存入和取出的顺序是一致的,元素都有索引,元素可以重复
| --ArrayList: 底层的数据结构是数组, 线程不同步, ArrayList 替代了 Vector, 查询元素的速度非常快
| --LinkedList: 底层的数据结构是链表, 线程不同步, 增删元素的速度非常快
| --Vector: 底层的数据结构就是数组, 线程同步的, Vector 无论查询和增删都巨慢。
List集合的特点是该集合所有方法都有索引
主要方法有添加,删除,获取和修改
集合引用和迭代器引用在同时操作元素, 通过集合获取到对应的迭代器后 在迭代中进行集合引 用的元素
添加, 迭代器并不知道, 所以会出现异常情况。因此 是List 集合特有迭代器ListIterator接口,它 具备了对元素的增、 删、 改、 查的动作。
LinkedList模拟堆栈和队列的数据结构:
  1. package day14;
  2. import java.util.LinkedList;
  3. /*使用LinkedList模拟堆栈和队列的数据结构
  4. 1、堆栈先进后出
  5. 2、队列先进先出*/
  6. public class LinkListdemo {
  7. public static void sop( Object o)
  8.         {
  9.                 System.out.println(o);
  10.         }
  11. public static void main(String[] args)

  12.                 LinkedList ll=new LinkedList();
  13.                 ll.addFirst("java01");
  14.                 ll.addFirst("java02");
  15.                 ll.addFirst("java03");
  16. sop(ll);
复制代码
对于 list 集合, 底层判断元素是否相同, 其实用的是元素自 身的 equals 方法完成的。 所以建议元素都
要复写 equals 方法, 建立元素对象自己的比较相同的条件依据。
例如:将自定义对象做为元素 传入ArrayList集合中去除重复的元素,比如人的年龄姓名相同则视为重复元素
  1. public class Arraylistdemo2 {
  2. public static void sop( Object o)
  3.         {
  4.                 System.out.println(o);
  5.         }
  6. public  static ArrayList getArray(ArrayList al)//定义方法用于获取一个存储不重复元素集合的方法
  7.         {
  8.                 ArrayList a2=new ArrayList();//定义新集合
  9.                 Iterator it=al.iterator();
  10.                 while(it.hasNext())
  11.                 {
  12.                         Object obj=it.next();
  13.                         if(!(a2.contains(obj)))//判断新集合中是否包含此元素
  14.                                 a2.add(obj);//若不包含则存入
  15.                 }
  16.                 return a2;
  17.                
  18.         }
  19. public static void main(String[] args) {
  20.                 ArrayList al=new ArrayList();
  21.                 al.add(new person("java1",1));
  22.                 al.add(new person("java1",1));
  23.                 al.add(new person("java2",2));
  24.                 al.add(new person("java2",2));
  25.                 al.add(new person("java3",3));
  26.                 al.add(new person("java3",3));
  27.                 al.add(new person("java4",4));
  28. al=getArray( al);
  29.                   Iterator it=al.iterator();
  30.                   while(it.hasNext())
  31.                         {
  32.                                 Object obj=it.next();
  33.                                 person p=(person)obj;
  34.                                 sop(p.getAge()+"......"+p.getName());//打印元素信息
  35. }}}
复制代码
  1. <div class="blockcode"><blockquote>package day14;

  2. public class person {

  3.         private String name;
  4.         private int age;
  5.        
  6.         public person(String name,int age){
  7.                 this.name=name;
  8.                 this.age=age;
  9.                
  10.         }
  11.         public int getAge() {
  12.                 return age;
  13.         }
  14.         public void setAge(int age) {
  15.                 this.age = age;
  16.         }
  17.        
  18.         public String getName() {
  19.                 return name;
  20.         }
  21.         public void setName(String name) {
  22.                 this.name = name;
  23.         }
  24.        
  25.         public int hashCode()
  26.         {
  27.             System.out.println(this.name+"-------hashcode");
  28.                 return this.name.hashCode()+this.age;
  29.         }
  30.         public boolean equals(Object obj)//重写equals方法,主函数调用contains(obj)方法时会自动调用元素的equals方法进行比较
  31.         {
  32.                 if(!(obj instanceof person))
  33.                 return false;
  34.                 person p=(person)obj;
  35.                   System.out.println(this.name+"---equals---"+p.name);
  36.                 return this.name.equals(p.name)&&this.age==p.age;
  37.         }
  38.        
  39. }
复制代码



HashSet: 底层数据结构是哈希表, 线程是不同步的。 无序, 高效;
HashSet 集合保证元素唯一性: 通过元素的 hashCode 方法和equals方法完成的。
当元素的 hashCode 值相同时, 才继续判断元素的 equals 是否为 true。如果为 true, 那么视为相同元素, 不存。 如果为 false, 那么存储。如果 hashCode 值不同, 那么不判断 equals, 从而提高对象比较的速度。
  1. <blockquote>package day14;
复制代码
  1. package day14;

  2. public class person {

  3. private String name;
  4. private int age;

  5. public person(String name,int age){
  6. this.name=name;
  7. this.age=age;

  8. }
  9. public int getAge() {
  10. return age;
  11. }
  12. public void setAge(int age) {
  13. this.age = age;
  14. }

  15. public String getName() {
  16. return name;
  17. }
  18. public void setName(String name) {
  19. this.name = name;
  20. }

  21. public int hashCode()//重写hashCode()方法
  22. {
  23. System.out.println(this.name+"-------hashcode");
  24. return this.name.hashCode()+this.age;
  25. }
  26. public boolean equals(Object obj)//重写equals方法,主函数调用contains(obj)方法时会自动调用元素的equals方法进行比较
  27. {
  28. if(!(obj instanceof person))
  29. return false;
  30. person p=(person)obj;
  31. System.out.println(this.name+"---equals---"+p.name);
  32. return this.name.equals(p.name)&&this.age==p.age;
  33. }

  34. }
复制代码
TreeSet 集合排序有两种方式, Comparable 和 Comparator 区别:
1: 让元素自 身具备比较性, 需要元素对象实现 Comparable 接口 , 覆盖 compareTo 方法。
2: 让集合自 身具备比较性, 需要定义一个实现了 Comparator 接口 的比较器, 并覆盖 compare 方法, 并将
该类对象作为实际参数传递给 TreeSet 集合的构造函数。当两者同时存在时以第二种为主

  1. package day14;

  2. public class Student implements Comparable {//实现Comparable接口对象强制排序

  3.         private String name;
  4.         private int age;
  5.        
  6.         public Student(String name,int age){
  7.                 this.name=name;
  8.                 this.age=age;
  9.                
  10.         }
  11.         public int getAge() {
  12.                 return age;
  13.         }
  14.         public void setAge(int age) {
  15.                 this.age = age;
  16.         }
  17.        
  18.         public String getName() {
  19.                 return name;
  20.         }
  21.         public void setName(String name) {
  22.                 this.name = name;
  23.         }
  24.        
  25.         public int compareTo(Object o) {//复写compareTo方法
  26.        
  27.                 if(!(o instanceof Student))
  28.                         throw new RuntimeException("不是学生对象");
  29.                 Student s=(Student)o;
  30.                 System.out.println(this.name+"::"+s.name);
  31.                 if(this.age>s.age)
  32.                    return 1;
  33.                 if(this.age==s.age){
  34.                  return        this.name.compareTo(s.name);//返回1表示this大于s,返回0表示对象相等
  35.                 }
  36.                 return -1;
  37.         }

  38. }
复制代码
  1. package day14;

  2. import java.util.Comparator;

  3. public class myCompare implements Comparator//定义比较器
  4. {
  5.         @Override
  6.         public int  compare (Object o1,Object o2)//重写compare方法
  7.         {
  8.                 Student s1=(Student)o1;
  9.                 Student s2=(Student)o2;
  10.                 int num=s1.getName().compareTo(s2.getName());
  11.                
  12.                 if(num==0)
  13.                 {
  14.                         return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
  15.                 }
  16.                 return num;
  17.         }

  18.        
  19.        
  20. }
复制代码

  1. package day14;

  2. import java.util.Iterator;
  3. import java.util.TreeSet;

  4. public class treesetdemo1 {
  5.        
  6.         public static void sop(Object obj)
  7.         {
  8.                 System.out.println(obj);
  9.         }
  10. public static void main(String[] args) {
  11.                 TreeSet ts=new TreeSet(new myCompare());//构造方法传入比较器
  12.                 ts.add(new Student("ts1",1));
  13.                 ts.add(new Student("ts3",3));
  14.                 ts.add(new Student("ts2",2));
  15.                 ts.add(new Student("ts4",2));
  16.                 ts.add(new Student("ts1",1));
  17.                
  18.                 Iterator it=ts.iterator();
  19.                while(it.hasNext())
  20.                {
  21.                        Object obj=it.next();
  22.                        Student s=(Student)obj;
  23.                        sop(s.getName()+"-----"+s.getAge());
  24.                }
  25.                
  26.         }

  27.         }

复制代码
















0 个回复

您需要登录后才可以回帖 登录 | 加入黑马