java基础之集合篇

1.概述
1.1、什么是集合?有什么用?
数组其实就是一个集合。集合实际上就是一个容器。可以来容纳其它类型的数据。

集合为什么说在开发中使用较多?
	集合是一个容器,是一个载体,可以一次容纳多个对象。在实际开发中,假设连接数       
	据库,数据库当中有10条记录,那么假设把这10条记录查询出来,在java程序中会将
	10条数据封装成10个java对象,然后将10个java对象放到某一个集合当中,将集合传    
	到前端,然后遍历集合,将一个数据一个数据展现出来。

1.2、集合不能直接存储基本数据类型,另外集合也不能直接存储java对象,
集合当中存储的都是java对象的内存地址。(或者说集合中存储的是引用。)
	list.add(100); //自动装箱Integer
	注意:
		集合在java中本身是一个容器,是一个对象。
		集合中任何时候存储的都是“引用”。

1.3、在java中每一个不同的集合,底层会对应不同的数据结构。往不同的集合中
存储元素,等于将数据放到了不同的数据结构当中。什么是数据结构?数据存储的
结构就是数据结构。不同的数据结构,数据存储方式不同。例如:
	数组、二叉树、链表、哈希表...
	以上这些都是常见的数据结构。

	你往集合c1中放数据,可能是放到数组上了。
	你往集合c2中放数据,可能是放到二叉树上了。
	.....
	你使用不同的集合等同于使用了不同的数据结构。

	你在java集合这一章节,你需要掌握的不是精通数据结构。java中已经将数据结构
	实现了,已经写好了这些常用的集合类,你只需要掌握怎么用?在什么情况下选择
	哪一种合适的集合去使用即可。

	new ArrayList();  创建一个集合,底层是数组。
	new LinkedList(); 创建一个集合对象,底层是链表。
	new TreeSet();    创建一个集合对象,底层是二叉树。
	.....

1.4、集合在java JDK中哪个包下?
	java.util.*;
	所有的集合类和集合接口都在java.util包下。

1.5、为了让大家掌握集合这块的内容,最好能将集合的继承结构图背会!!!
	集合整个这个体系是怎样的一个结构,你需要有印象。

1.6、在java中集合分为两大类:

	一类是单个方式存储元素:
		单个方式存储元素,这一类集合中超级父接口:java.util.Collection;

	一类是以键值对儿的方式存储元素
		以键值对的方式存储元素,这一类集合中超级父接口:java.util.Map;
2.初学重点

2.1、集合继承结构图(重点,可以背过)

collection:Collection结构图
Map:
Map结构图

2.2、 常用集合方法:(必会)
boolean add(Object e)      向集合中添加元素
int size()                 获取集合中元素的个数
void clear()               清空集合
boolean contains(Object o) 判断当前集合中是否包含元素o,包含返回true,不包含返回false
boolean remove(Object o)   删除集合中的某个元素。
boolean isEmpty()          判断该集合中元素的个数是否为0
void sort()                对集合进行排序
Object[] toArray()         调用这个方法可以把集合转换成数组。【作为了解,使用不多。】
2.2、常用集合:

(1)ArrayList集合(类比数组,有序可重复)

ArrayList知识点:
1、默认初始化容量10(底层先创建了一个长度为0的数组,当添加第一个元素的时候,
初始化容量10。)

2、集合底层是一个Object[]数组。

3、构造方法:
    new ArrayList();
    new ArrayList(20);
    
4、ArrayList集合的扩容:增长到原容量的1.5倍。
    ArrayList集合底层是数组,怎么优化?
       尽可能少的扩容。因为数组扩容效率比较低,建议在使用ArrayList集合
       的时候预估计元素的个数,给定一个初始化容量。
       
5、数组优点:
    检索效率比较高。(每个元素占用空间大小相同,内存地址是连续的,知道首元素内存地址,
    然后知道下标,通过数学表达式计算出元素的内存地址,所以检索效率最高。)
    
6、数组缺点:
    随机增删元素效率比较低。
    另外数组无法存储大数据量。(很难找到一块非常巨大的连续的内存空间。)
    
7、向数组末尾添加元素,效率很高,不受影响。

8、面试官经常问的一个问题?
    这么多的集合中,你用哪个集合最多?
        答:ArrayList集合。
        因为往数组末尾添加元素,效率不受影响。
        另外,我们检索/查找某个元素的操作比较多。
        
9、ArrayList集合是非线程安全的。(不是线程安全的集合。)

(2)HashSet集合(无序,不可重复)

1、HashSet集合是无序的切不可重复的。实际底层存放到HashMap中。
2.3、 集合迭代(重点)
	// 注意:以下讲解的遍历方式/迭代方式,是所有Collection通用的一种方式。
	 // 在Map集合中不能用。在所有的Collection以及子类中使用。
	 // 创建集合对象
	 Collection c = new ArrayList(); // 后面的集合无所谓,主要是看前面的Collection接口,怎么遍历/迭代。
	 // 添加元素
	 c.add("abc");
	 c.add("def");
	 c.add(100);
	 c.add(new Object());
	 // 对集合Collection进行遍历/迭代:
	 // 第一步:获取集合对象的迭代器对象Iterator
	 Iterator it = c.iterator();
	 // 第二步:通过以上获取的迭代器对象开始迭代/遍历集合。
	 /*
	     以下两个方法是迭代器对象Iterator中的方法:
	         boolean hasNext()如果仍有元素可以迭代,则返回 true。
	         Object next() 返回迭代的下一个元素。
	  */
	 while (it.hasNext()) {
	     Object obj = it.next();
	     System.out.println(obj);
	 }

注意1:一直取,不判断,会出现异常!
反例:

    // 出现异常:java.util.NoSuchElementException
    while(true){
          Object obj = it.next();
          System.out.println(obj);
      }

注意2:集合结构只要发生改变,迭代器必须重新获!。
反例:

Collection c2 = new ArrayList();
        c2.add("abc");
        c2.add("def");
        c2.add("xyz");
        Iterator it2 = c2.iterator();//获取迭代器
        c2.add("xyz");//更改了c2的数据结构
        while(it2.hasNext()){
            Object o = it2.next();     
            System.out.println(o);
        }
        //出现异常:java.util.ConcurrentModificationException

报错:错误
还有泛型也是重点,见java-集合-泛型篇!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值