java集合初解

一、集合的由来

        通常,我们的Java程序需要根据程序运行时才知道创建了多少个对象。但若非程序运行,程序开发阶段,我们根本不知道到底需要多少个数量的对象,甚至不知道它的准确类型。为了满足这些常规的编程需要,我们要求能在任何时候,任何地点创建任意数量的对象,而这些对象用什么来容纳呢?我们首先想到了数组,但是!数组只能存放同一类型的数据,而且其长度是固定的,那怎么办了?集合便应运而生了。

二、集合是什么?

Java集合类存放在java.util包中,是一个用来存放对象的容器。

  注意:

  1. 集合只能存放对象。比如你存入一个int型数据66放入集合中,其实它是自动转换成Integer类后存入的,Java中每一种基本数据类型都有对应的引用类型。
  2. 集合存放的都是对象的引用,而非对象本身。所以我们称集合中的对象就是集合中对象的引用。对象本身还是放在堆内存中。
  3. 集合可以存放不同类型,不限数量的数据类型。      

三、数组和集合的比较

数组不是面向对象的,存在明显的缺陷,集合弥补了数组的缺点,比数组更灵活更实用,而且不同的集合框架类可适用不同场合。如下:

  1. 数组能存放基本数据类型和对象,而集合类存放的都是对象,集合类不能存放基本数据类型。数组和集合存放的对象皆为对象的引用地址
  2. 数组容易固定无法动态改变,集合类容量动态改变。
  3. 数组无法判断其中实际存有多少元素,length只告诉了数组的容量,而集合的size()可以确切知道元素的个数
  4. 集合有多种实现方式和不同适用场合,不像数组仅采用顺序表方式
  5. 集合以类的形式存在,具有封装、继承、多态等类的特性,通过简单的方法和属性即可实现各种复杂操作,大大提高了软件的开发效率

四、java集合

Collection和Map,是集合框架的根接口。

Collection的子接口:

Set:接口 ---实现类: HashSet、LinkedHashSet
Set的子接口SortedSet接口---实现类:TreeSet
List:接口---实现类: LinkedList,Vector,ArrayList

List集合

有序列表,允许存放重复的元素;
实现类:    

  • ArrayList:数组实现,查询快,增删慢,轻量级
  • LinkedList:双向链表实现,增删快,查询慢 
  • Vector:数组实现,重量级 (使用少)

ArrayList:

底层是Object数组,所以ArrayList具有数组的查询速度快的优点以及增删速度慢的缺点。

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

public class Demo01 {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("小明");
        list.add(22);
        list.add("张三");
        list.add("洛克");
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }
}

输出结果:
        小明
        22
        张三
        洛克

ArrayList常用方法:

void add(int index, Object element) :添加对象element到位置index上
boolean addAll(int index, Collection collection) :在index位置后添加容器collection中所有的元素
Object get(int index) :取出下标为index的位置的元素
int indexOf(Object element) :查找对象element 在List中第一次出现的位置
int lastIndexOf(Object element) :查找对象element 在List中最后出现的位置
Object remove(int index) :删除index位置上的元素
ListIterator listIterator(int startIndex) :返回一个ListIterator 跌代器,开始位置为startIndex

 Set集合

        无序集合,不允许存放重复的元素;允许使用null元素
        对 add()、equals() 和 hashCode() 方法添加了限制
        HashSet和TreeSet是Set的实现、

HashSet

        HashSet类直接实现了Set接口,其底层其实是包装了一个HashMap去实现的。HashSet采用          HashCode算法来存取集合中的元素,因此具有比较好的读取和查找性能。

HashSet的特征:

  • 不仅不能保证元素插入的顺序,而且在元素在以后的顺序中也可能变化
  • HashSet元素值可以为NULL
import java.util.HashSet;
import java.util.Set;

public class Demo01 {
    public static void main(String[] args) {
        Set set = new HashSet();
        set.add("小小");
        set.add("莉莉");
        set.add("张三");
        set.add(55);
        System.out.println(set);
    }
}

运行结果:
           [莉莉, 张三, 55, 小小]

Map集合

集合框架的第二类接口树。
它提供了一组键值的映射。其中存储的每个对象都有一个相应的关键字(key),关键字决定了对象在Map中的存储位置。
关键字应该是唯一的,每个key 只能映射一个value。

实现类:
HashMap、TreeMap、LinkedHashMap、Hashtable等

  • HashMap:键值对,key不能重复,但是value可以重复;key的实现就是HashSet;value对应着放;允许null的键或值;
  • Hashtable:线程安全的,不允许null的键或值;
  • Properties::key和value都是String类型,用来读配置文件;
  • TreeMap:对key排好序的Map; key 就是TreeSet, value对应每个key; key要实现Comparable接口或TreeMap有自己的构造器;
  • LinkedHashMap: 此实现与HashMap的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。存储的数据是有序的。

HashMap:

  • Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许重复,但允许值重复。
  • HashMap 是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。
  • HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;
  • HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力。
import java.util.HashMap;
import java.util.Map;

public class Demo01 {
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("张三",12);
        map.put("李四",13);
        map.put("王五",18);
        map.put("可可",17);
        System.out.println(map);
    }
}

运行结果:
         {李四=13, 张三=12, 王五=18, 可可=17}

Map常用方法:

  • Object put(Object key,Object value):用来存放一个键-值对Map中
  • Object remove(Object key):根据key(键),移除键-值对,并将值返回
  • void putAll(Map mapping) :将另外一个Map中的元素存入当前的Map中
  • void clear() :清空当前Map中的元素
  • Object get(Object key) :根据key(键)取得对应的值
  • boolean containsKey(Object key) :判断Map中是否存在某键(key)
  • boolean containsValue(Object value):判断Map中是否存在某值(value)
  • public Set keySet() :返回所有的键(key),并使用Set容器存放
  • public Collection values() :返回所有的值(Value),并使用Collection存放
  • public Set entrySet() :返回一个实现 Map.Entry 接口的元素 Set

总结

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值