Java中数组以及集合

java中数组: 数组在Java里是一种特殊类型,有别于普通的“类的实例”的对象。但实际数组也是一种对象类型,int[]a = new int[5]  a是在java栈中分配的引用变量,类型是int[] 数组类型,指向在堆里面地址连续的实际数组对象。

在内存中,数组存储在连续的区域内部,因为数组中每个元素的类型相同,则占用的内存大小也一致,所以在访问数组中的元素时可以直接根据数组在内存中的起始位置以及下标来计算元素的位置,因此数组的访问速度很高。数组必须要初始化才能使用,初始化之后JVM会自动分配默认值,引用变量默认值是null。

数组和集合的区别:

1》数组初始化之后大小固定,无法再改变,集合大小可以改变。

2》同一个数组只能存储同一种数据类型(基本类型/引用类型).集合不考虑泛型可以存储多种数据类型,集合是存储对象的,所以基本类型不能放入集合,可以使用基本类型的包装类型。

3》若程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用。

数组和集合之间进行转化:

toArray():将集合转化为数组。

Arrays.asList():将数组转化为集合.

集合的体系结构

List、Set、Map是这个集合体系中最主要的三个接口。 List和Set继承自Collection接口。 Map也属于集合系统,但和Collection接口不同。

Set无序,不允许元素重复。HashSet和TreeSet是两个主要的实现类。Set 只能通过游标来取值,并且值是不能重复的。

List有序且允许元素重复。ArrayList、LinkedList和Vector是三个主要的实现类。 ArrayList 是线程不安全的, Vector 是线程安全的,这两个类底层都是由数组实现的 LinkedList 是线程不安全的,底层是由链表实现的

Map 是键值对集合。其中key列就是一个集合,key不能重复,但是value可以重复。 HashMap、TreeMap和Hashtable是Map的三个主要的实现类。 HashTable 是线程安全的,不能存储 null 值 HashMap 不是线程安全的,可以存储 null

------------| Collection 单例集合的根接口 ----------------| List  如果是实现了List接口的集合类,具备的特点: 有序,可重复。  -------------------| ArrayList  ArrayList 底层是维护了一个Object数组实现的。 特点: 查询速度快,增删慢。 -------------------| LinkedList LinkedList 底层是使用了链表数据结构实现的, 特点: 查询速度慢,增删快。 -------------------| Vector(了解即可)  底层也是维护了一个Object的数组实现的,实现与ArrayList是一样的,但是Vector是线程安全的,操作效率低。 ----------------| Set  如果是实现了Set接口的集合类,具备的特点: 无序,不可重复。 -------------------| HashSet  底层是使用了哈希表来支持的,特点: 存取速度快.  -------------------| TreeSet   如果元素具备自然顺序 的特性,那么就按照元素自然顺序的特性进行排序存储。

Collection接口的方法:

int size();                 boolean isEmpty();              boolean contains(Object o);           Iterator<E> iterator();                Object[] toArray();        boolean add(E e);             boolean remove(Object o);           boolean containsAll(Collection<?> c);       boolean addAll(Collection<? extends E> c);           boolean removeAll(Collection<?> c);         

void clear();

http://blog.csdn.net/qq_33642117/article/details/52040345        set的讲解

http://blog.csdn.net/qq_33642117/article/details/52049764        map的讲解

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java一日一条

JAVA集合类(大公司面试喜欢问的)

看了一些所谓大公司的Java面试问题,发现对于JAVA集合类的使用都比较看重似的,而自己在这方面还真的是所真甚少,抽空也学习学习吧。

11520
来自专栏石奈子的Java之路

原 java数据结构与算法之数组篇

21440
来自专栏desperate633

LintCode 最长上升子序列题目分析

给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。 说明最长上升子序列的定义: 最长上升子序列问题是在一个无序的给定序列中找到一个尽可能长的...

7320
来自专栏lulianqi

ArrayList List<T> T[] Array

不保证会对 ArrayList 排序。 在执行需要对 ArrayList 排序的操作(如 BinarySearch)之前,必须对 ArrayList 进行排序。

8610
来自专栏郭耀华‘s Blog

Java容器类List、ArrayList、Vector及map、HashTable、HashMap的区别与用法

Java容器类List、ArrayList、Vector及map、HashTable、HashMap的区别与用法 ArrayList 和Vector是采用...

41680
来自专栏黑泽君的专栏

java基础学习_常用类小结

  Object:是类层次结构的根类,所有类都直接或者间接的继承自该类。   Scanner:获取键盘录入数据的类。   String:针对字符串的常见操...

10440
来自专栏mathor

JDK1.5泛型

13840
来自专栏陈树义

6.Java集合总结系列:常见集合类的使用(List/Set/Map)

MARK 总结: Set、List 和 Map 可以看做集合的三大类。 List集合是有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问。...

36350
来自专栏数据结构与算法

2977 二叉堆练习1

2977 二叉堆练习1 时间限制: 10 s 空间限制: 32000 KB 题目等级 : 白银 Silver 题目描述 Description 已...

27160
来自专栏计算机视觉与深度学习基础

Leetcode 229. Majority Element II

Given an integer array of size n, find all elements that appear more than ⌊ n/...

21060

扫码关注云+社区

领取腾讯云代金券