黑马程序员 集合的复习

来源:互联网 发布:vue.js可以做什么 编辑:程序博客网 时间:2024/05/02 03:27
---------------------- android培训、java培训、期待与您交流! ----------------------


Collection

|--List:元素是有序的,元素可以重复。因为该集合体系有索引。
    |--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
    |--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
    |--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。
    实际开发中遇到增删和查询都存在的情况推荐使用ArrayList的方法。

|--Set:元素是无序,元素不可以重复。

    |--HashSet:数据结构是哈希表。线程是非同步的。
    保证元素唯一性的原理:判断元素的hashCode值是否相同。
    如果相同,还会继续判断元素的equals方法,是否为true。
    |--TreeSet:可以对Set集合中的元素进行排序。
    底层数据结构是二叉树。
    保证元素唯一性的依据:
    compareTo方法return 0.
    TreeSet排序的第一种方式:让元素自身具备比较性。
    元素需要实现Comparable接口,覆盖compareTo方法。
    这种方式也成为元素的自然顺序,或者叫做默认顺序。

例子:

class TreeSetDemo
{
 public static void main(String[] args)
 {
  TreeSet ts = new TreeSet();

  ts.add(new Student("lisi02",22));
  ts.add(new Student("lisi007",20));
  ts.add(new Student("lisi09",19));
  ts.add(new Student("lisi08",19));

  Iterator it = ts.iterator();
  while(it.hasNext())
  {
   Student stu = (Student)it.next();
   System.out.println(stu.getName()+"..."+stu.getAge());
  }
 }
}


class Student implements Comparable//该接口强制让学生具备比较性。
{
 private String name;
 private int age;

 Student(String name,int age)
 {
  this.name = name;
  this.age = age;
 }

//覆盖compareTo方法,让元素按照compareTo的方法来比较。

 public int compareTo(Object obj)
 {
  
  if(!(obj instanceof Student))
   throw new RuntimeException("不是学生对象");
  Student s = (Student)obj;

  System.out.println(this.name+"....compareto....."+s.name);
  if(this.age>s.age)
   return 1;
  if(this.age==s.age)
  {
   return this.name.compareTo(s.name);
  }
  return -1;
 }

 public String getName()
 {
  return name;

 }
 public int getAge()
 {
  return age;
 }
}


    TreeSet的第二种排序方式。 

     当元素自身不具备比较性,或者具备的比较性不是所需要的。
     这时需要让容器自身具备比较性。
     定义了比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。
     比较器的定义方法:定义一个类,实现Comparator接口,覆盖compare方法。

     当两种排序都存在时,以比较器为主。

     例子:

class  TreeSetTest
{
 public static void main(String[] args)
 {
  TreeSet ts = new TreeSet(new StrLenComparator());//将比较器传递给集合。

  ts.add("abcd");
  ts.add("cc");
  ts.add("cba");
  ts.add("aaa");
  ts.add("z");
  ts.add("hahaha");

  Iterator it = ts.iterator();

  while(it.hasNext())
  {
   System.out.println(it.next());
  }
 }
}

//构建一个比较器

class StrLenComparator implements Comparator
{
覆盖比较器的方法

// public int compare(Object o1,Object o2)
 {
  String s1 = (String)o1;
  String s2 = (String)o2; 

  int num = new Integer(s1.length()).compareTo(new Integer(s2.length()));
  if(num==0)
   return s1.compareTo(s2);

  return num;
 }
}

Map
 |--Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0.效率低。
 |--HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代,jdk1.2.效率高。
 |--TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。

map集合的两种取出方式:
1,Set<k> keySet:将map中所有的键存入到Set集合。因为set具备迭代器。
 所有可以迭代方式取出所有的键,在根据get方法。获取每一个键对应的值。
  Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。
2,Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到了set集合中,
    而这个关系的数据类型就是:Map.Entry

    Entry其实就是Map中的一个static内部接口。
    为什么要定义在内部呢?
    因为只有有了Map集合,有了键值对,才会有键值的映射关系。
    关系属于Map集合中的一个内部事物。
    而且该事物在直接访问Map集合中的元素。

class MapDemo2
{
 public static void main(String[] args)
 {
  Map<String,String> map = new HashMap<String,String>();

  map.put("02","zhangsan2");
  map.put("03","zhangsan3");
  map.put("01","zhangsan1");
  map.put("04","zhangsan4");

  //将Map集合中的映射关系取出。存入到Set集合中。
  Set<Map.Entry<String,String>> entrySet = map.entrySet();

  Iterator<Map.Entry<String,String>> it = entrySet.iterator();

  while(it.hasNext())
  {
   Map.Entry<String,String> me = it.next();
   String key = me.getKey();
   String value = me.getValue();

   System.out.println(key+":"+value);

  }

  /*
  //先获取map集合的所有键的Set集合,keySet();
  Set<String> keySet = map.keySet();

  //有了Set集合。就可以获取其迭代器。
  Iterator<String> it = keySet.iterator();

  while(it.hasNext())
  {
   String key = it.next();
   //有了键可以通过map集合的get方法获取其对应的值。
   String value  = map.get(key);
   System.out.println("key:"+key+",value:"+value);
  }

  */

 }
}

 

 


 

 

 

---------------------- android培训、java培训、期待与您交流! ----------------------

原创粉丝点击