java集合

Posted 弘666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java集合相关的知识,希望对你有一定的参考价值。

一、集合和数组

数组不是面向对象的,存在明显的缺陷,集合弥补了数组的缺点,比数组更灵活更实用,而且不同的集合框架类可适用不同场合。
1、数组能存放基本数据类型和对象,而集合类存放的是对象,不能存放基本数据类型。数组和集合存放的对象皆为对象的引用地址。
2、数组容易固定无法动态改变,集合类的容量是可以动态改变的。
3、数组无法判断其中实际存有多少元素,length只显示数组的容量,而集合的size()可以确切的知道元素的个数。
4、数组仅采用顺序表方式,集合可以有多种实现方式和不同适用场合。
5、集合以类的形式存在,具有封装、继承、多态等类的特性,就是里面有很多封装了的方法,你直接调用就可以实现各种复杂的操作,大大提高了效率。

public class testarray {
    public static void main(String[] args){
        String[] myarray = new String[10];
        myarray[0] = "王五";
        myarray[1] = "王一";
        myarray[2] = "王二";
        System.out.println(myarray.length);//输出10
        System.out.println(myarray[4]);//输出null
    }
}

二、java集合

Collection 接口的接口 对象的集合(单列集合) 
├——-List 接口:元素按进入先后有序保存,可重复 
│—————-├ LinkedList 接口实现类, 链表, 插入删除, 没有同步, 线程不安全 
│—————-├ ArrayList 接口实现类, 数组, 随机访问, 没有同步, 线程不安全 
│—————-└ Vector 接口实现类 数组, 同步, 线程安全 
│ ———————-└ Stack 是Vector类的实现类 
└——-Set 接口: 仅接收一次,不可重复,并做内部排序 
├—————-└HashSet 使用hash表(数组)存储元素 
│————————└ LinkedHashSet 链表维护元素的插入次序 
└ —————-TreeSet 底层实现为二叉树,元素排好序

Map 接口 键值对的集合 (双列集合) 
├———Hashtable 接口实现类, 同步, 线程安全 
├———HashMap 接口实现类 ,没有同步, 线程不安全- 
│—————–├ LinkedHashMap 双向链表和哈希表实现 
│—————–└ WeakHashMap 
├ ——–TreeMap 红黑树对所有的key进行排序 
└———IdentifyHashMap

java集合分为collection和map两个,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。

1、Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。
2、除了集合,该框架也定义了几个 Map 接口和类。Map 里存储的是键/值对。尽管 Map 不是集合,但是它们完全整合在集合中。

 

接口:是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口,是为了以不同的方式操作集合对象

实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。

算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。

public class TestArraylist {
    public static void main(String[] args){
        List<String> mylist = new ArrayList<String>();
        mylist.add("王五");
        mylist.add("王一");
        mylist.add("王二");
        System.out.println(mylist.size());//输出3
        System.out.println(mylist.get(2));//输出王二
    }
}

collection下面有List、Set、Queue

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

  • ArrayList:数组实现,查询快,增删慢,轻量级;(线程不安全)扩容按1.5倍
  • LinkedList:双向链表实现,增删快,查询慢 (线程不安全)
  • Vector:数组实现,重量级 (线程安全、使用少)扩容按2倍大小扩容

Set集合:无序,存储顺序和添加顺序不一样,不允许存放重复的数据

  • Hashset:底层是HashMap实现,哈希表,采用HashCode算法存取,读取、查找性能优(线程不安全)元素值可以为NULL
  • LinkedHashSet:它是HashSet的一个子类,LinkedHashSet也根据HashCode的值来决定元素的存储位置,但同时它还用一个链表来维护元素的插入顺序,插入的时候即要计算hashCode又要维护链表,而遍历的时候只需要按链表来访问元素。
  • TreeSet:实现了SortedSet接口,顾名思义这是一种排序的Set集合,即有序,只允许存入同一类的元素,实现Comparable接口,TreeSet 会调用compareTo方法比较元素大小,然后按升序排序。




参考:https://www.cnblogs.com/chenglc/p/8073049.html
参考菜鸟:https://www.runoob.com/java/java-collections.html

以上是关于java集合的主要内容,如果未能解决你的问题,请参考以下文章

201621123062《java程序设计》第九周作业总结

Java方法

金蝶handler中 collection 代码片段理解

Alfred常见使用

比较 C# 中的字符串片段并从集合中删除项目

带有红宝石集合/可枚举的酷技巧和富有表现力的片段[关闭]