java基础_集合

集合
1.List:继承Collection接口,实现类有ArrayList LinkedList Vector ;有序,值可重复,可以存储空值;

①List遍历方法:

 1 public static void main(String[] args) {
 2         List<String> list = new ArrayList<String>();
 3         //插入数据
 4         list.add(null);list.add("a");list.add("b");list.add("a");
 5
 6         //遍历方法1
 7         Iterator<String> iterator = list.iterator();
 8         while(iterator.hasNext()){
 9             System.out.print(iterator.next()+",");
10         }
11
12         System.out.println();
13
14         //遍历方法2
15         /*
16          * listIterator()是List独有遍历方法,不仅可以从前往后遍历,      也可以逆向遍历。iterator()只能从前往后遍历;
17          * 有add set remove方法,也可以获得遍历的位置;
18          */
19         ListIterator<String> listIterator = list.listIterator();
20         //从前往后遍历
21         while(listIterator.hasNext()){
22             System.out.print(listIterator.next()+",");
23         }
24         System.out.println();
25         //从后往前遍历
26         while(listIterator.hasPrevious()){
27             System.out.print(listIterator.previous()+",");
28         }
29         System.out.println();
30         //add方法
31         listIterator.add("c");
32         listIterator = list.listIterator();
33         while(listIterator.hasNext()){
34             System.out.print(listIterator.next()+",");
35         }
36         System.out.println();
37         //remove方法,iterator也有remove方法
38         listIterator.remove();
39         listIterator = list.listIterator();
40         while(listIterator.hasNext()){
41             System.out.print(listIterator.next()+",");
42         }
43         System.out.println();
44         //set方法
45         listIterator.set("change");
46         listIterator = list.listIterator();
47         while(listIterator.hasNext()){
48             System.out.print(listIterator.next()+",");
49         }
50
51         System.out.println();
52         //遍历方法3
53         for(String str:list){
54             System.out.print(str+",");
55         }
56
57         System.out.println();
58         //遍历方法4 java8新特性
59         list.forEach(e->{
60             System.out.print(e+",");
61         });
62
63     }

List接口的实现类ArrayList LinkedList Vector都适用以上遍历方法。

②ArrayList LinkedList Vector之间的区别

ArrayList和LinkedList都是非同步的,线程不安全,当多线程时list改变会报错ConcurrentModificationException

 1 public class ListSynchronizationTest {
 2
 3     public static void main(String[] args) {
 4         List<String> list = new LinkedList<>();
 5         list.add("a");
 6         list.add("b");
 7
 8         Thread thread1 = new Thread(new Runnable() {
 9             public void run() {
10                 itertor(list);
11             }
12         });
13         thread1.start();
14
15         Thread thread2 = new Thread(new Runnable() {
16             public void run() {
17                 list.add("c");
18             }
19         });
20         thread2.start();
21     }
22
23     public static void itertor(List<String> list){
24         for(String str:list){
25             System.out.print(str+",");
26         }
27     }
28 }

但是可以自己写同步方法Collections.synchronizedList(list);

ArrayList:非同步,实现了可变大小的数组(默认大小是10),ArrayList随机查询性能高(因为数组可以直接用索引查找),增加删除性能低(数组会移动,所以慢。但如果是一个数据的操作,反而LinkList性能不如ArrayList);

LinkList:非同步,链表式结构,对于增加删除性能高。

Vector:类似ArrayList,但是Vector是同步的,当遍历时改变集合,会抛出异常ConcurrentModificationException。当不考虑线程安全的情况时,ArrayList性能高。当当前集合的元素数量大于集合的长度时,Vector性能高,因为Vector增长是100%,ArrayList是50%;
Stack:继承于Vector;
Set: 实现了Collection接口。不可重复,无序;HashSet,TreeSet,EnumSet三个类实现了Set接口;
HashSet:无序,不可重复,非同步,可存储空值。
LinkedHashSet:继承HashSet,有序,可存储空值。
TreeSet:SortedSet接口的唯一实现,有序,不可重复,不能存储空值。
EnumSet:EnumSet是一个专门为枚举类设计的集合,内部以向量的方式存储,占用内存很少,运行效率很高,不能存储空值。
Map: 并不是继承Collection接口,是以键值对形式存储数据的。
HashTable:同步的,线程安全的。无序,key和value都不能是空,当自己定义的类作为key时,需要实现hashCode和equals方法。
HashMap:不是同步的,无序,空值可以作为key和value;
WeakHashMap:HashMap的改进,当key不被外部引用时可以被GC回收。
TreeMap:是实现的SortedMap接口,是有序的。空值不能作为key和value;

时间: 2024-10-31 06:39:15

java基础_集合的相关文章

Java基础_集合概述以及Colletion集合

集合 1.集合的概述 (1).集合的来由 我们学习的是面向对象的语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们必须把这个对象进行 存储,而要想存储多个对象,就不能是一个基本的变量,而应该是一个容器类型的变量,在我们目前所学过的只是里面,有哪一些是容器类 型的呢? 数组和StrngBuffer.但是呢?StringBuffer的结果是一个字符串,不一定满足我们的要求,所以我们只能够选择数组,也就是对象数组. 而对象数组又并不能够适应变化的需求,因为数组的长度是固

Java基础_集合泛型

泛型 1.泛型概述 我们在集合中存储数据的时候,存储了String和Integer俩种类型的数据.而在遍历的时候,我们把它当做是String类型处理,做了转化,所以 会报错.但是呢?它在编译期间却没有告诉我们.所以我们觉得这一个设计的不好.所以集合也模仿着数组中在定义之前指明数据的类型,在 创建对象的时候明确元素的数据类型.这样就不会存在问题了.这一种技术被称为泛型. 2.泛型 是一种把类型明确的工作推迟到创建对象或者调用方法的时候才去明确的特殊类型.参数化类型,把类型当作参数传递. 3.泛型定

java基础之集合Set

1.集合 当向集合Set中增加对象时,首先集合计算要增加对象的hashcode,根据该值得到一个位置用来存放当前的对象,当在该位置没有一个对象存在的时候,集合set认为该对象在集合中不存在,直接增加进去.如果在该位置有一个对象存在,接着将准备增加到集合中的的对象与该位置上的对象进行equals比较,若返回false,在进行一次散列,将该对象放到散列后计算出的新地址.若返回true,不会再将该对象增加到集合中 2.当重写equals方法时,必须要重写hashcode方法 如果一个类的两个对象,使用

java基础之集合List-ArrayList、LinkedList、Vector的区别

PS:本篇博客主要参考jdk的底层源码,而非自己动手写代码. 请问ArrayList.LinkedList.Vector的区别 ①ArrayList底层实际上是采用数组实现的(并且该数组的类型的Object类型的) ②如果jdk6,采用Array.copyOf()方法来生成一个新的数组,如果是jdk5,采用的是System.arraycopy()方法(当添加的数据量大于数组的长度时候) ③List list = newArrayList()时,底层会生成一个长度为10的数组来存放对象 ④Arra

黑马程序员——java基础 ArrayList集合基本方法演示

java基础 ArrayList集合基本方法演示 import java.util.ArrayList; import java.util.Iterator; public class ArrayListDemos { public static void main(String[] args) { // 创建一个新的容器 ArrayList al = new ArrayList(); al.add("abc1"); al.add("abc2"); al.add(&

Java基础之 集合体系结构(Collection、List、ArrayList、LinkedList、Vector)

Java基础之 集合体系结构详细笔记(Collection.List.ArrayList.LinkedList.Vector) 集合是JavaSE的重要组成部分,其与数据结构的知识密切相联,集合体系就是对数据结构的封装 数组与集合的比较 数组:长度固定,可以存储基本数据类型,也能存储对象 集合:长度可变,只能存储对象类型(由于有包装类的存在,集合可以存储任何类型) 集合的体系结构 集合也叫容器,用于存储对象 我们根据不同的需求和不同的数据结构来对集合做了不同的抽象 Collection接口-公共

JAVA基础学习-集合三-Map、HashMap,TreeMap与常用API

一.Map简述 1.1.简述 public interface Map<K,V> 类型参数: K - 此映射所维护的键的类型 key V - 映射值的类型 value 该集合提供键--值的映射.key不能重复,一对对的存储方式 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. 1.2.方法 嵌套类摘要 static interface Map.Entry<K,V> 映射项(键-值对). 方法摘要 void clear() 从此映射中移除所有映射关系(可选操

JAVA基础之集合框架

集合框架(collections framework) 首先要明确,集合代表了一组对象(和数组一样,但数组长度不能变,而集合能).Java中的集合框架定义了一套规范,用来表示.操作集合,使具体操作与实现细节解耦. 其实说白了,可以把一个集合看成一个微型数据库,操作不外乎"增删改查"四种操作,我们在学习使用一个具体的集合类时,需要把这四个操作的时空复杂度弄清楚了,基本上就可以说掌握这个类了. 设计理念 主要理念用一句话概括就是:提供一套"小而美"的API.API需要对

黑马程序员-Java基础之集合(一)

集合框架:用于存储数据的容器. 特点: 1:对象封装数据,对象多了也需要存储.集合用于存储对象. 2:对象的个数确定可以使用数组,但是不确定怎么办?可以用集合.因为集合是可变长度的. 集合和数组的区别: 1:数组是固定长度的:集合可变长度的. 2:数组可以存储基本数据类型,也可以存储引用数据类型:集合只能存储引用数据类型. 3:数组存储的元素必须是同一个数据类型:集合存储的对象可以是不同数据类型.   数据结构:就是容器中存储数据的方式. 对于集合容器,有很多种.因为每一个容器的自身特点不同,其