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集合的主要内容,如果未能解决你的问题,请参考以下文章