JAVA笔记四:集合

Java集合工具包位置是java.util.*
Java集合主要包括2块:数据结构(Collection接口,Map接口)和工具类(Arrays,Collections,Iterator迭代器)。

• 静态数组类:即我们通常意义上说的数组,是最特殊的Java类,Object的直接子类(遵循Object类的所有规则,比如a=b是传递对象地址),但是没有类文件,也没有构造函数。它的大小一旦初始化后就不能变化了。
⁃ 声明:int[] intarray或int intarray[]。
⁃ 初始化:new int[3];intarray ={1,2,3};或者new int[]{3, 1, 2, 6, 4, 2}
⁃ 属性:length,
• 工具类:java.util.Arrays类提供了一系列的静态方法,以数组对象实例作为入参。

⁃	System.arraycopy(arr, index, copytoarr, index + 1,size - index);native方法,浅拷贝一个数组。
	⁃	Copytoarr=Arrays.copyOf(arr,size);深拷贝一个数组,本质上还是调用了arraycopy方法,但是返回了一个新的数组对象。
	⁃	Copytoarr=Arrays.copyOfRange(arr,from,to),
	⁃	Arrays.fill(arr,匹配arr类型的值value);
	⁃	Arrays.fill(arr,fromindex,toindex,value);
	⁃	Arrays.sort(arr);只能对基本数据类型升序排。
	⁃	Arrays.sort(Object,实现Comparator接口的类);或者让待排序对象所在的类实现Comparable接口,并重写Comparable接口中的compareTo()方法。
	⁃	Arrays.binarySearch(Object[]arr,Object keytosearch);二分法查找,arr排序后才能使用

• 工具类:java.util.Iterator类
⁃ 所有的集合都会实现Iterator,它屏蔽了访问不同种类集合时的差异。

⁃	Iterator iter = list.iterator();
	⁃	iter.hasNext();
	⁃	iter.next();

• fail-fast:当某一个线程遍历集合的过程中,集合的内容被另外一个线程所改变了;就会抛出ConcurrentModificationException异常,产生fail-fast事件。

Collection接口:包括2个子接口,List和Set。
List接口:List的实现类有LinkedList, ArrayList, Vector(子类Stack)。
• ArrayList:线程不安全。基于数组实现,通常被称为动态数组(大小可变)。每次增加删除元素是利用System.arraycopy拷贝并生成一个新的数组。第一个元素序号是0。

⁃	ArrayList list = new ArrayList();
	⁃	List<String> list = new ArrayList<String>();
	⁃	list.add("1");
	⁃	list.add(0, "5");
	⁃	list.remove("3");
	⁃	list.get(i);
	⁃	list.size();
	⁃	list.contains(3);
	⁃	list.set(1, "10");
	⁃	list.clear();
	⁃	list.isEmpty();

⁃ 遍历 Integer value
1.迭代:

Iterator iter = list.iterator();
while (iter.hasNext()) {
    value = (Integer)iter.next();
}

2.索引: value = (Integer)list.get(i);
3.for循环:for (Integer integ:list) {...}
⁃ list转数组Integer[] newText = (Integer[])list.toArray(new Integer[0]);
⁃ 数组转list ArrayList list=Arrays.asList(arr);
• CopyOnWriteArrayList(java.util.concurrent):List<String> list = new CopyOnWriteArrayList<String>();

• LinkedList:线程不安全。基于内部类Entry作为链表元素实现,是双向链表。每次增加删除元素通过遍历链表的方式,无法利用数组的索引,所以访问效率低于数组,但是增删元素效率高。

⁃	list.add("1");
⁃	list.addFirst("10");void方法,抛异常
⁃	list.offerFirst(e) ;返回false
⁃	list.remove("3");
⁃	llist.removeFirst();
⁃	list.pollFirst();返回null
⁃	list.get(i);
⁃	llist.getFirst();
⁃	llist.peekFirst();
⁃	llist.getLast();
⁃	llist.peekLast();
⁃	list.size();

Set接口:
• HashSet:基于HashMap实现,map存储的键值对为(key=set值,value=固定值PRESENT)

⁃	HashSet set = new HashSet();
⁃	set.add("1");
⁃	set.remove("e");
⁃	set.clear();
⁃	set.isEmpty();
⁃	set.size();
⁃	HashSet set2 = (HashSet)set.clone();

Map接口:
• HashMap:线程不安全。key对应的哈希值相同的元素Entry(包括hash,key,value,next成员变量)会存在同一个单向链表中,数组table则存储所有链表的第一个元素。key可以是任意实现了hashCode()方法和equals方法的对象(所以不能是基本数据类型,因为没有实现这些方法),也可以是null(只能存一个)。size是HashMap的大小,它是HashMap保存的键值对的数量。

⁃	HashMap map = new HashMap();
⁃	map.put(“key1”,”value1”);
⁃	map.remove("key1");
⁃	value=map.get(“key1”);
⁃	map.size();
⁃	map.containsKey(“key1”);
⁃	map.containsValue(“value1”);
⁃	map.clear();
⁃	map.isEmpty();

⁃ Entry对象

 Map.Entry entry=(Map.Entry)it.next();
	⁃	entry.getKey();
	⁃	entry.getValue();

⁃ 和集合关系:entrySet(),values(),keySet()
map.keySet().Interator();



• ConcurreentHashMap

查询效率:比较常见的是ArrayList

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值