Java类集框架:Collection , List , Set 和 Map 用法和区别

一、常见集合

首先看一下他们之间的关系

Collection          接口的接口   对象的集合
├ List                   子接口      按进入先后有序保存   可重复
│├ LinkedList                接口实现类   链表   插入删除   没有同步   线程不安全
│├ ArrayList                  接口实现类   数组   随机访问   没有同步   线程不安全
│└ Vector                      接口实现类   数组                  同步        线程安全
│   └ Stack
└ Set                   子接口       仅接收一次,并做内部排序

├ HashSet

│   └ LinkedHashSet
└ TreeSet

Map                接口      键值对的集合
├ Hashtable                  接口实现类                  同步           线程安全
├ HashMap                   接口实现类                  没有同步    线程不安全

│├ LinkedHashMap

│└ WeakHashMap

├ TreeMap
└ IdentifyHashMap

更为精炼的总结:

Collection 是对象集合, Collection 有两个子接口 List 和 Set

List 可以通过下标 (1,2..) 来取得值,值可以重复

而 Set 只能通过游标来取值,并且值是不能重复的

ArrayList , Vector , LinkedList 是 List 的实现类

ArrayList 是线程不安全的, Vector 是线程安全的,这两个类底层都是由数组实现的

LinkedList 是线程不安全的,底层是由链表实现的  


Map 是键值对集合

HashTable 和 HashMap 是 Map 的实现类  
HashTable 是线程安全的,不能存储 null 值  
HashMap 不是线程安全的,可以存储 null 值  

 

  1.ArrayList

  • ArrayList类中常用方法:

  • ArrayList简单使用:
public class ArrayListDemo01 {
       public static void main(String[] args) {
      List<String> allList=null;
      Collection<String> allCollection=null;
      allList=new ArrayList<String>();
      allCollection=new ArrayList<String>();
      allList.add("Hello");
      allList.add(0,"World");
      System.out.println(allList);
      allCollection.add("I");
      allCollection.add("am");
      allCollection.add("Groot");
      allList.addAll(allCollection);
      System.out.println(allList);
      String str[]=allList.toArray(new String[] {});
      System.out.print("指定数组类型:");
      for(int i=0;i<str.length;i++) {
         System.out.print(str[i]+"、");
      }
      System.out.print("\n返回对象数组:");
      Object obj[]=allList.toArray();
      for(int i=0;i<obj.length;i++) {
         String temp=(String)obj[i];
         System.out.print(temp+"、");
      }
      System.out.println();
      System.out.println(allList.contains("Groot")?"\"Groot\"字符串存在":"\"Groot\"不存在");
      List<String> sub=allList.subList(0, 1);   //左闭右开
      System.out.print("集合截取:");
      for(int i=0;i<sub.size();i++) {
         System.out.print(allList.get(i)+"、");
      }
     System.out.println("");
     System.out.println("Groot的位置:"+allList.indexOf("Groot"));
       }
}

 运行结果:

  • LinkedList的简单使用
import java.util.LinkedList;

public class LinkedListDemo {
  
	public static void main(String[] args) {
		// TODO Auto-generated method stub
     LinkedList<String> link=new LinkedList<String>();
     link.add("a");
     link.add("b");
     link.add("c");
     System.out.println("初始化链表:"+link);
     link.addFirst("x");
     link.addLast("Y");
     System.out.println("增加头和尾之后的链表:"+link);
     System.out.println(link.size());
     for(int i=0;i<link.size();i++){   
    	 System.out.println("循环次数:"+i);
    	 System.out.println("链表大小: "+link.size());
    	 System.out.println(link.poll()+"、");   //poll()检索并删除此列表的头(第一个元素)。
     }

	}

}

   运行结果:

  2.Set

  • Set类常用方法

  • Set类简单使用
import java.util.SortedSet;
import java.util.TreeSet;
public class TreeSetDemo01 {
       public static void main(String[] args) {
      SortedSet<String> allSet=new TreeSet<String>();
      allSet.add("A");
      allSet.add("B");
      allSet.add("C");
      allSet.add("C");   //Set不重
      allSet.add("D");
      allSet.add("E");
      allSet.add("F");
      System.out.println(allSet);
      System.out.println("第一个元素:"+allSet.first());
      System.out.println("最后一个元素:"+allSet.last());
      System.out.println("headSet元素:"+allSet.headSet("C"));
      System.out.println("tailSet元素:"+allSet.tailSet("C"));      //左闭右开
      System.out.println("subSet元素:"+allSet.subSet("B", "D"));   //左闭右开
       }
}

  运行结果:

  3.Map

  • Map类常用方法:

  • Map类简单使用:
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HashMapDemo01 {
       public static void main(String[] args) {
    Map<String,String> map=null;
    map=new HashMap<String,String>();
    map.put("key", "value");
    map.put("father", "digen");
    map.put("mother", "jimei");
    String val=map.get("father");
    System.out.println("father对应的内容:"+val);
    Set<String> keys=map.keySet();
    Iterator<String> iter=keys.iterator();
    System.out.print("全部的key:");
     while(iter.hasNext()){
       String str=iter.next();
       System.out.print(str+"、");
    }
     System.out.println();
     Collection<String> values=map.values();
     System.out.println(values.contains("digen")?"包括digen":"不包括digen");
     Iterator<String> iter2=values.iterator();
     System.out.print("\n全部的value: ");
     while(iter2.hasNext()) {
        String str=iter2.next();
        System.out.print(str+"、");
     }
       }
}

运行结果

二.项目实战

见下篇

相关链接:https://blog.csdn.net/zccst/article/details/5056920?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值