Java的集合框架简单学习笔记——Collection,ArrayList,LinkedList,HashSet,TreeSet,HashMap

Java的集合框架简单介绍

java中有一个由设计优良的接口和类组成的Java集合框架,以方便程序员操作成批的数据或对象元素,本文会讲解其中常用的一些接口的方法以及其应用

集合框架结构
在这里插入图片描述
这里只显示了Collection接口的一部分接口和Map接口下常用的HashMap接口,而这两个接口下还是有许多其他的接口的,本文没有介绍,读者有兴趣可以再去了解。

-----------------------------------------------------------------正文开始---------------------------------------------------------

1.Collection接口
Collection接口是Set接口和List接口的父接口,是最基本的接口,定义了对集合进行基本操作的一些通用方法,Collection接口提供的主要方法如下:
在这里插入图片描述
之后的接口可以调用这些方法

CollectionTest.java

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class CollectionTest{

      public static void main(String[] args){
   Collection c =new ArrayList();  //创建集合c
            
            c.add("Apple");
            c.add("Banana");
            c.add("pear");
            c.add("Orange");
            ArrayList arry =new ArrayList();  //创建集合arry
            
            arry.add("Cat");
            arry.add("Dog");
            System.out.println("集合c中元素个数为:"+c.size());
            if(!arry.isEmpty()){   //array不为空
                c.addAll(arry);   //将集合array中的元素添加到集合c中
            }
            System.out.println("集合c中的元素个数:"+c.size());

           Iterator iterator=c.iterator();   //返回迭代器对象
            System.out.println("集合c中的元素:");
            while(iterator.hasNext()){
             System.out.print(iterator.next()+" ");   
            }
              System.out.println();
            if(c.contains("Cat")){
                    System.out.println("----集合c中包含元素Cat-----");
            }
            c.removeAll(arry);   //从集合c中删除集合arry中所有的元素
            iterator=c.iterator();
            System.out.println("集合c中的元素:");
            while (iterator.hasNext()){
            System.out.println(iterator.next()+" ");
           }
            System.out.println();
          //将集合中的元素存放到字符数组中
            Object[]  str=c.toArray();
            String s="";
            System.out.println("数组中的元素为:");
            for(int i=0;i<str.length;i++){
                    s=(String) str[i];    //将对象强制转化为字符串
                    System.out.print(s+" ");  //输出数组元素
            } 
            System.out.println();
}	               

}

这里用到了待会要讲到的ArrayList类,主要是为了突出Collection接口与子接口的关系以及操作
1.Collection接口能够将整个子接口的元素作为一个整体来进行添加与删除
2.通过迭代器对象(Iterator)来将集合中的元素输出

结果:
在这里插入图片描述

2.List 接口
List接口是Collection的子接口,实现List接口的容器类中的元素是有顺序的,并且元素可以重复。List容器中的元素对应一个整数型的序号,记录其在List容器中的位置,可以根据序号存取容器中的元素。除了继承Collection接口的方法外,又提供了一些方法
在这里插入图片描述
本文介绍实现List接口的容器类ArrayList、LinkedList

  • a.ArrayList类

ArrayList类实现一个可变大小的数组,可以像链表一样被访问。它以数组的方式实现,允许快速随机存取。它允许包含所有元素,包括null元素。每个ArrayList类实例都有一个容量(capacity),即存储元素的数组大小,这个容量可以随着不断添加新元素而自动增加

ArrayList类常用的构造方法有3种重载形式:

构造一个初始容量为10的空列表:
public ArrayList()

构造一个指定初始容量的空列表:
public ArrayList(int initialCapacity)

构造一个包含指定集合元素的列表,这些元素是按照该集合的迭代器返回它们的顺序排列:
public ArrayList(Collection c)

ArrayListTest.java

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ArrayListTest{
            public static void main(String args[]){
                ArrayList list=new ArrayList();
                list.add("cat");
                list.add("dog");
                list.add("pig");
                list.add("sheep");
                list.add("pig");

                System.out.println("------输出集合中的元素-----");
                Iterator iterator=list.iterator();
                while(iterator.hasNext()){
                    System.out.print(iterator.next()+"  ");                
                }
                System.out.println();
                //替换指定索引处的元素
                System.out.println("返回替换集合中索引是1的元素: "+list.set(1,"mouse"));
                iterator = list.iterator();
                 System.out.println("----元素替换后集合中的元素------");
                while(iterator.hasNext()){
                    System.out.print(iterator.next()+"  ");                
                }
                System.out.println();
                //获取指定索引处的集合元素
                System.out.println("获取集合中索引是2的元素:"+list.get(2));
                System.out.println("集合中第一次出现pig的索引"+list.indexOf("pig"));
                System.out.println("集合中最后一次出现dog的索引"+list.lastIndexOf("dog"));
                List l =list.subList(1,4);  //返回集合中 [1,4)的集合
                iterator = l.iterator();
                System.out.println("-------新集合中的元素------");
                while(iterator.hasNext()){
                    System.out.print(iterator.next()+"  ");                
                }
                System.out.println();
            }
}

结果:
在这里插入图片描述

  • b. LinkedList 类

LinkedList实现了List接口,允许null元素。LinkedList类实现一个链表可以对集合的首部和尾部进行插入和删除操作,这些操作可以使LinkedList类被用作堆栈(stack)、队列(queue)或双向队列(deque)。相对于ArrayList,LinkedList在插入或删除元素时提供了好的性能,但是随机访问元素的速度则相对较慢。LinkedList类除了承List接口的方法,又提供了一些方法
在这里插入图片描述
LinkedListTest.java

import java.util.Iterator;
import java.util.LinkedList;
public class LinkedListTest{
            public static void main(String [] args){
      LinkedList list = new LinkedList();
      list.add("cat");
      list.add("dog");
      list.add("pig");
      list.add("sheep");
      list.add("mouse");
      list.add("duck");
      System.out.println("-------输出集合中的元素---------");
      Iterator iterator=list.iterator();
      while(iterator.hasNext()){
            System.out.print(iterator.next()+" ");
       }
       System.out.println();
        System.out.println("获取集合中的第一个元素:"+list.getFirst());
        System.out.println("获取集合中的最后一个元素:"+list.getLast());
        System.out.println("删除集合中的第一个元素"+list.removeFirst());
        System.out.println("删除集合中的最后一个元素"+list.removeLast());
        System.out.println("------------删除元素后的集合---------");
        iterator = list.iterator();
        while(iterator.hasNext()){
        System.out.print(iterator.next()+" ");    
        }
        System.out.println();
}
}

结果:
在这里插入图片描述

3.Set接口
Set接口的容器类中的元素是没有顺序的,并且元素不可以重复,Set接口没有新增方法

  • a.HashSet类

HashSet类实现了Set接口,不允许出现重复元素,不保证集合中元素的顺序,允许包含值为null的元素,但最多只能有一个。HashSet添加一个元素时,会调用元素的hashCode()方法,获得其哈希码,根据这个哈希码计算该元素在集合中的存储位置。HashSet使用哈希算法存储集合中的元素,可以提高集合元素的存储速度

HashSet类的常用构造方法有3种重载形式

构造一个新的空Set集合:
public HashSet()

构造一个包含指定集合中的元素的新Set集合:
public HashSet(Collection c)

构造一个新的空Set集合,指定初始容量:
public HashSet(int initialCapacity)

HashSetTest.java

import java.util.HashSet;
import java.util.Iterator;
public class HashSetTest{
        public static void main(String [] args){
            HashSet hash = new HashSet();
            hash.add("56");
            hash.add("32");
            hash.add("50");
            hash.add("48");
            hash.add("48");
            hash.add("23");
            System.out.println("集合元素个数:"+hash.size());
            Iterator iter = hash.iterator();
            while(iter.hasNext()){
              System.out.print(iter.next()+" ");
            }
            System.out.println();
}

}

结果:
在这里插入图片描述

b.TreeSet类
TreeSet类不仅继承了Set接口,还继承了SortedSet接口,它不允许出现重复元素。由于SortedSet接口可以对集合中的元素进行自然排序(即升序排序),因此TreeSet类会对实现了Comparable接口的类的对象自动排序
TreeSet类提供的方法如表:
在这里插入图片描述
TreeSetTest.java

import java.util.Iterator;
import java.util.SortedSet;
import java.util.TreeSet;

public class TreeSetTest{
        public static void main(String [] args){
        TreeSet tree=new TreeSet();
        tree.add("45");
        tree.add("32");
        tree.add("68");
        tree.add("12");
        tree.add("20");
        tree.add("80");
        tree.add("75");
        System.out.println("集合元素个数:"+tree.size());
        System.out.println("------集合中的元素-----");
        Iterator iter=tree.iterator();
        while(iter.hasNext()){
        System.out.print(iter.next()+" ");
        }
        System.out.println();
        System.out.println("----集合中20~68的元素----");
        SortedSet s = tree.subSet("20","68");
        iter = s.iterator();
        while(iter.hasNext()){
            System.out.print(iter.next()+" ");
        }
        System.out.println();
        System.out.println("--------集合中45之前的元素------");
        SortedSet s1 = tree.headSet("45");
         iter = s1.iterator();
         while(iter.hasNext()){
            System.out.print(iter.next() + " ");
        }
        System.out.println();
         System.out.println("--------集合中45之后的元素------");
         SortedSet s2 = tree.tailSet("45");
          iter = s2.iterator();
          while(iter.hasNext()){
                System.out.print(iter.next()+" ");
        }
        System.out.println();
        System.out.println("集合中的第一个元素:"+tree.first());
        System.out.println("集合中的第一个元素:"+tree.last());
        System.out.println("获取并移出集合中第一个元素:"+tree.pollFirst());
        System.out.println("获取并移出集合中最后一个元素:"+tree.pollLast());
        System.out.println("------集合中的元素------");
        iter = tree.iterator();
        while(iter.hasNext()){
                System.out.print(iter.next()+" ");
        }
        System.out.println();
        }

}

结果:
在这里插入图片描述
4.Map接口

Map接口是用来存储“键-值”对的集合,存储的“键-值”对是通过键来标识的,所以键不可以重复

  • a.HashMap类
    HashMap是基于哈希表的Map接口的实现类,以“键-值”对映射的形式存在。它在HashMap中总是被当作一个整体,系统会根据哈希算法来计算“键-值”对的存储位置,具有很快的访问速度,最多允许一条记录的键为null,不支持线程同步。可以通过键快速地存取值。TreeMap类继承了AbstractMap,可以对键对象进行排序。
    Map接口提供的方法如表:在这里插入图片描述
    HashMapTest.java
import java.util.Iterator;
import java.util.Set;
import java.util.HashMap;
public class HashMapTest{
    public static void main(String[] args){
     HashMap map = new HashMap();
    map.put("101","一代天骄");
    map.put("102","成吉思汗");
    map.put("103","只识弯弓射大雕");
    map.put("104","俱往矣");
    map.put("105","数风流人物");
    map.put("106","还看今朝");
   System.out.println("键值为102的值为:"+map.get("102"));
    Set s = map.keySet();
    Iterator iterator =s.iterator();
    String key="";
    while(iterator.hasNext()){
     key=(String)iterator.next();
    System.out.println(key+":"+map.get(key));
    }
}

}

结果:
在这里插入图片描述
--------------------------------------------------------------正文结束------------------------------------------------------------
参考书籍:《Java 从入门到项目实践 》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值