数组与集合
来源:互联网 发布:drugbank数据库 编辑:程序博客网 时间:2024/06/06 06:43
个人数组和容器学习总结
一、数组
- 数组声明其容纳元素的类型,并且数组只能存放类型相同的数据;
- 数组的实例有固定的大小,创建之后无法改变,是静态的;
- 数组的效率与类型检查最好,但功能少。
- 数组的创建方式有三种:
int[] arr1={1,2,3,44,555};int[] arr2=new int[]{1,22,333,4444};//创建一个声明数组大小的实例,int[] arr3=new int[6];
① 数组常用方法和属性通常只有length属性,其表示数组的大小,但并不能知道数组内是否存在元素;
② 数组内元素可以用‘[]’访问,数组下标从零开始,例arr1[0]=1;
当数组没有元素时,主数据类型(primitive)显示初始值为0,例:arr3[1]=0,若是引用类型Object或String显示为null,boolean为false;
③ 数组有做边界检查,当下标越界时,会发生RunTimeException——-IndexOutOfBoundsException;
java提供了java.Arrays类,可以提供填充数组fill()方法、自动排序sort()、比较equals()、以及用于在一个已经排序的数组中查找元素的binarySearch();还有asList()可以直接把数组添加到List中,如果是基础数据类型数组,需取出list后遍历,引用类型数组可以直接遍历。
二、集合
常用的三个接口list、set、map, list、set继承Collection接口;collection存放独立元素的序列,map存放key-value形式的元素对。
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
- list
List有序且允许重复元素,允许有null值;list经常使用的方法:添加元素add()、移除remove()、set()、移除所有clear()、得到元素get(index)、contain()等。
LinkList数据结构为链表结构,删除,增加元素效率高,随机访问元素效率较低;
ArrayList数据结构为线性表,基于数组创建的容器类,随机访问元素效率高,删除、增加元素效率低,ArrayList默认初始大小为10,自动增长公式JDK1.8 int newCapacity = oldCapacity + (oldCapacity >> 1),即原大小的1.5倍,c#中为size*2; - set
Set类中不允许存在重复元素,主要有HashSet,TreeSet两个实现类,通常使用contain()方法查看容器中元素是否已存在,set中常用方法和list大致相同,有些细节有区别,不存在get()方法;HashSet中add()本质上是添加了一个HashMap对象:
public HashSet(int initialCapacity) { map = new HashMap<>(initialCapacity); } //HashMap中put方法public V put(K key, V value) { if (key == null) return putForNullKey(value); int hash = hash(key.hashCode()); int i = indexFor(hash, table.length); for (Entry<K,V> e = table[i]; e != null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { V oldValue = e.value; e.value = value; e.recordAccess(this); return oldValue; } } modCount++; addEntry(hash, key, value, i); return null; }
if (e.hash == hash && ((k = e.key) == key || key.equals(k)));
可以看出先比较hashcode,得到这个位置是否有空位,没有存在直接存入,如果已存在元素,在调用eauals方法比较值。
3.Map
Map以键值对(key-value)的结构存储数据,key值不能重复,value值可以,主要有HashMap和TreeMap、HashTable等实现类,
HashMap使用hash的散列机制;遍历HashMap可以先用values()方法获得所有value值,存在一个Collection对象中,然后便利就可以了。HashMap只有一个元素时允许有null key、任意数量都可以有null value,并且是线程不安全的,有containsValue()和containsKey()方法;
HashTable是线程安全的,不允许有null key或null value,相对效率也低一些,比HashMap稍旧,有contain()方法。
- 数组与集合 -- 数组
- 数组与集合
- 集合与数组
- Java集合与数组
- 数组与集合
- 集合与数组NSSet
- 集合与数组转换
- java数组与集合
- 数组与集合
- 集合与数组互换
- 数组与集合
- 数组与集合
- 集合与数组浅析
- 数组与集合
- 黑马程序员--数组与集合
- 黑马程序员--数组与集合
- Java:集合与数组转换
- 集合与数组的转换
- 欢迎使用CSDN-markdown编辑器
- mysql权限
- Hibernate与MyBatis的对比总结
- 基于Java语言实现Socket通信
- myeclipse导出可运行jar包
- 数组与集合
- 分布式事务:两阶段提交、一阶段提交、事务补偿机制
- jsp中a标签的文字如何居中
- pinyin4j:获取中文串拼音或拼音首字母
- 【Oracle】delete表后commit后怎么找回,方法
- EditTextp篇
- 从三位数推广到四位数
- crontab 使用方法
- Eclipse中Cannot nest src folder解决方法