`

List、Set和Map的解说

    博客分类:
  • JAVA
阅读更多

1. List接口的特征:

    (1) 有顺序的。(2) 可重复的。(3) 存放不同的数据类型。

2. Set接口的特征:

    (1) 无顺序的。(2) 不可重复的。(3) 可以存放不同的数据类型。

3. SortedSet接口的特征:

    (1) 继承了Set接口。(2) 排好顺序的集合。(3) 不可重复的。(4) 只存放同类型的。

4. 类和接口关系:

    LinkedList、ArrayList、Vector类  ---实现--->    List接口

    HashSet类    ---实现--->   Set接口

    TreeSet类     ---实现--->   SortedSet接口

    HashMap、HashTable   ---实现--->  Map接口(HashTable有个子类Properties专门用来读取配置文件)

    TreeMap        ---实现--->   SortedMap接口

5. List实现类比较:

    (1) ArrayList:底层用数组来实现;查询效率高,添加删除慢。

    (2) LinkedList: 底层用双向链表来实现;查询效率低,添加删除快。

    (3) Vector:底层也用数组实现;它是一个线程安全的ArrayList;应用与多线程。

6. HashSet:

    (1) 它里面的数据没有下标的,所以不能用for循环来遍历,只能用Iterator(迭代器)。

    (2) 底层代码用"哈希表"来实现。

7. 一种比较奇怪的现象:

    HashSet set = new HashSet();

    set.add("hello"); 这个添加成功。

    set.add("hello"); 添加失败,因为Set是"不可重复的"。

    set.add(new String("hello")); 这个也没有添加成功!! 为什么?? 难道是因为"不同对象但equals相等的原因".

    所以就按照上面的思想"不同对象但equals相等的原因",继续写两个类,再添加两个同一Person类时,这两个Person类是不同对象但equals相同,但是结果却添加成功了。这个又是为什么 ??

     原因:哈希表它希望元素随机地等概率的分布在底层数组中。

              计算hashcode的步骤过程:

              (1) 调用Person的hashcode()方法(主要是指地址,因为两个Person类地址不一样,所以得到的int值不一样),得到int值。

              (2) int%总容器(求余),求余后得到一个值(这个值为下标)。

              (3) 冲突(若求出的余数相同则冲突),然后调用equals方法。

              这样就可以解释上面的原因了:

                   因为String有"池化思想"。它的"hello"和new String("hello")是在同一个池中,所以地址是一样的,这样就会发生"冲突",然后它又去调用equals方法,但是hello的equals都相等的。所以最后没有插进去!!

                    但是Person就不一样了,它的地址就不一样的,所以就没有发生冲突的。这样就不用equals了,直接可以插进去了!!

 

8. 往hashset类中添加对象时,一定要覆盖hashcode()方法和equals()方法。

 

9. Treeset类:底层是用二叉树来比较的。

    (1) 构造方法(自然排序)  。

    (2) 自己定义比较器来排序。

10. 两种比较方式来往Treeset里面添加数据。

     (1) 让类来实现java.lang包中的Comparable接口,然后实现其中的compareTo方法,只要compareTo方法返回值为0,则认为它们两个相同。代码如下:

public class Person  implements Comparable{
	String name;
	int age;
	public int compareTo(Object o){
	    Person p = (Person)o;		
	    return p.age-this.age;		
	}
}

public class TreeSetTest2 {
	public static void main(String[] args) {
		TreeSet set = new TreeSet();
		set.add(new Person("ZhangSan",25));
		set.add(new Person("Lisi",28));
		set.add(new Person("WangWu",25));
		set.add(new Person("Lisi",20));
		Iterator it = set.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}
	}

}

 (2)另外一种是:(用比较器,调用Treeset的第三个构造函数,要求传递一个比较器)定义一个内部类去实现java.util包中的Comparator接口。代码如下:

public class TreeSetTest3 {
	public static void main(String[] args) {
		TreeSet set = new TreeSet(new MyComparator());
		set.add(new Student("Weiwei",20));
		set.add(new Student("Linlong",22));
		set.add(new Student("Huaxi",21));
		set.add(new Student("Wuxi",18));
		Iterator it = set.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}
	}

}

class MyComparator implements Comparator{
	public int compare(Object o1,Object o2){
		Student s = (Student)o1;
		Student s2 = (Student)o2;
		return s.age-s2.age;
	}
}

 注意:如果经常变动的要用比较器比较合适,因为它可以用不同的构造方法,同时传递不同的对象来改变比较的。

          如果不经常变动的,则用实现Comparable接口。

 

11. Comparable(接口)              可比较的                java.lang

      Comparator(接口)              比较器                    java.util

      Iterable(接口)                     可迭代的                java.lang

      Iterator(接口)                     迭代器                    java.util

      要想用"迭代器"进行遍历,必须实现Iterable接口,才能用迭代器。

      在java.lang包中有Iterable接口,这个接口中有iterator()方法,因为ArrayList实现了Iterable接口,所以就实现了iterator()方法,但这个方法的返回类型是Iterator这个接口的实现类,则it为实现类对象的一个引用,所以调用其中的3个方法。

      Iterator it = list.iterator();

      while(it.hasNext()){

          Object o = it.next();

          System.out.println(o);

       }

 

12. Map接口:

    (1)方法:keySet();返回类型为所有的key的集合。

                 get(Object key);得到key所对应的值。

        这两个方法结合起来进行遍历。

HashMap map = new HashMap();
Set s = map.keySet();
Iterator it = s.iterator();
while(it.hasNext()){
    Object key = it.next();
    Object value = map.get(key);
    System.out.println(key+":"+value);
}

 

HashMap<String, String> simCo = new HashMap<String, String>();
simCo.put("111", "aaaa");
simCo.put("222", "bbbb");
simCo.put("333", "cccc");
simCo.put("444", "dddd");
String sim = null;
String co_id = null;
if (simCo != null && simCo.size() > 0) {
	for (Map.Entry<String, String> entry2 : simCo.entrySet()) {
		sim = entry2.getKey().trim();
		co_id = entry2.getValue();
		System.out.println("sim="+sim+" co_id="+co_id);
	}
}


sim=444 co_id=dddd
sim=222 co_id=bbbb
sim=111 co_id=aaaa
sim=333 co_id=cccc

 

 

 

 13.

HashSet set = new HashSet();
Iterator it = set.iterator();
        while(it.hasNext()){
            Object o = it.next();
            System.out.print(o+"  ");
}

 

14.字符串的比较要用trim()和toLowerCase(),然后再indexOf来查找。

Set<Scene> sceneAllList = actor.getSceneCollection();
Iterator it = sceneAllList.iterator();
while(it.hasNext()){
   Scene s = (Scene)it.next();
   Set<SceneVideo> sceneVideoAllList = s.getSceneVideoCollection();
   Iterator i = sceneVideoAllList.iterator();
   while(i.hasNext()){
      SceneVideo sceneVideo = (SceneVideo)i.next();
      String strVideoUrl = sceneVideo.getVideoUrl();
      String strPlaylistFile = sceneVideo.getPlaylistFile();
      int indexUrl = strVideoUrl.trim().toLowerCase().indexOf(quality.trim().toLowerCase());
      int indexPlay = strPlaylistFile.trim().toLowerCase().indexOf(quality.trim().toLowerCase());
      if(indexUrl != -1 || indexPlay != -1){
         sceneQualityList.add(s);
      }
   }
}

 

 

分享到:
评论

相关推荐

    List,set,Map 的用法和区别

    Java 集合框架中 List、Set、Map 的用法和区别 Java 集合框架(Java Collections Framework)是 Java 语言中的一个重要组件,提供了一些基本的数据结构和算法来操作和存储数据。其中,List、Set、Map 是三个非常...

    java中set、list和map的使用方法实例

    // java中对象容器主要有Set,List和Map三个接口类。 // 迭代器(Iterator)模式,又叫做游标(Cursor)模式。 // GOF给出的定义为:提供一种方法访问一个容器(container)对象中的各个元素, // 而又不需暴露该...

    java中list、set和map 的区别

    ### Java中List、Set和Map的区别 在Java编程语言中,`List`、`Set`和`Map`是集合框架中的三个核心接口,它们分别代表了不同类型的集合数据结构,各自有着独特的特性和应用场景。 #### List `List`接口是最常用的...

    Collection,List,Set和_Map用法和区别

    Collection, List, Set 和 Map 用法和区别 Collection 是 Java 中的一种对象集合,提供了许多有用的方法来操作集合元素,例如添加、删除、遍历等。Collection 是一个接口,下面有两个子接口:List 和 Set。 List ...

    java集合类list-set-map.doc

    java集合类list-set-map.doc

    集合概述set、List、Map

    ### 集合概述:set、List、Map #### 一、集合框架概述 ##### 1.1.1 容器简介 在Java编程中,集合框架是一个非常重要的概念,它提供了一种灵活的方式来存储、操作和管理不同类型的对象集合。集合框架的主要目标是...

    Java_Collection_List-Set-Map.zip_list set map

    在Java编程语言中,集合框架是处理对象组的重要工具,主要包括List、Set和Map三大接口。这些接口由Java Collection Framework提供,它是一个统一的架构,用于存储和操作各种类型的对象。接下来,我们将深入探讨这三...

    JAVA集合map、list、set详解

    详细描述map、list、set的常用子类特性,各个场景的适用。

    Java 集合框架深度解析:List、Set 和 Map 的差异与应用

    集合框架中主要包括 List、Set 和 Map 三种类型的集合,它们各自有不同的特性和用途。本文将深入探讨 Java 集合框架,并详细分析 List、Set 和 Map 之间的区别及其应用场景。 Java 集合框架是 Java 程序设计中不可或...

    set,list,map区别与联系

    在Java编程语言中,`set`、`list`和`map`是非常重要的数据结构,它们分别代表了不同的集合类型,各自有着独特的特性与用途。 - **List**:有序集合,可以包含重复元素。 - **Set**:不允许重复元素的集合,不保证...

    List set map集合容器的区别

    根据给定文件的信息,我们可以详细地探讨一下Java中几种主要的集合容器——List、Set以及Map的区别,并且深入了解它们各自的特性和应用场景。 ### 一、List #### 1. ArrayList - **特点**:`ArrayList`是基于动态...

    Java集合Collection、List、Set、Map使用详解编程资料

    Java集合Collection、List、Set、Map使用详解

    Set-List-Map.rar_DEMO_list set map

    在Java编程语言中,集合框架是处理对象组的重要工具,主要包括`List`、`Set`和`Map`接口。这些接口及其实现类提供了丰富的功能,适用于各种数据存储和操作需求。`Set-List-Map.rar_DEMO_list set map`这个压缩包文件...

    测试报告与总结\list,set,map,数组间的相互转换

    测试报告与总结\list,set,map,数组间的相互转换.rar测试报告与总结\list,set,map,数组间的相互转换.rar测试报告与总结\list,set,map,数组间的相互转换.rar测试报告与总结\list,set,map,数组间的相互转换.rar

    Java操作Redis,实现String、List、Map的set和get

    // 测试set和get } @Test public void testListOperation() { // 测试list操作 } @Test public void testMapOperation() { // 测试map操作 } } ``` 在测试类中,为每个操作创建单独的测试用例,确保...

    Java集合:Collection、List、Set、Map使用详解

    本文将深入探讨Java集合框架中的四个主要接口:Collection、List、Set和Map,以及它们的实现原理。 ### 集合框架概述 集合框架是Java API中用于存储和管理对象的统一框架。它为数据结构提供了抽象接口,使得程序员...

    Java集合类List-Set-Map的区别和联系.doc

    Java 集合类 List-Set-Map 的区别和联系 Java 集合类 List、Set 和 Map 是 Java 语言中最基本的集合类,它们之间存在着紧密的联系和区别。在本文中,我们将对 Java 集合类 List、Set 和 Map 的区别和联系进行详细的...

    java中三种集合set、map、list的区别与联系

    在Java编程语言中,集合框架提供了多种数据结构来存储和操作数据,其中最常用的是`Set`、`Map`和`List`。这三种集合类型各自具有独特的特性和用途,理解它们之间的区别与联系对于有效地使用Java进行数据管理至关重要...

    collection,list,set,map

    在Java编程中,Collection、List、Set和Map是接口,它们位于java.util包下,是处理对象集合的核心部分。 - Collection是最基本的集合接口,它代表一组对象,称为其元素。Collection接口是所有集合框架的根接口,...

    set.list.map接口

    在Java编程语言中,集合框架是处理对象的重要工具,其中包括Set、List和Map三大接口。这些接口提供了多种数据结构和操作方法,使得开发者能够高效地组织和管理数据。 1. **Set接口**: Set接口表示一个不包含重复...

Global site tag (gtag.js) - Google Analytics