Java知识点串讲之集合

与肝胆人共事,无字句处读书

今天开始我们来学习一下Java基础知识中的另一个核心知识点,集合必须掌握。没有商量。

集合

1.定义:

java中的集合是指:长度可变,对象类型可以不一样的存储容器,
(重点:集合中是不可以存储基本的数据类型的)

//定义一个集合(正确示范)
List<Integer> list=new ArrayList<>();
list.add(1);
//错误示范
List<int> list=new ArrayList<>();
list.add(1);

对于刚接触java的人来讲,最需要了解的一点就是这个技术在工作中怎么用,也就是说:“工作中常用的集合有哪些,使用场景是什么样子的”
**接下来我们来看一张图:**了解一下集合的类结构
在这里插入图片描述
正式开始学习之前,给大家转变一下学习的思路
1:学习顶层,接口或是抽象类。
2:使用底层,子类或是实现类。

2.Collection集合(接口)

collection集合是所有单列集合的顶层接口,里面定义了所有单列集合共性的方法,任意的单列集合都可以使用collection集合的方法。,,具体有哪些方法呢?我们接着来看:
1.添加元素的方法add()

//定义一个集合,可以使用多态
public static void main(String[] args){
      Collection<String> list=new ArrayList<>();
      list.add("java");
}

2.清空集合 clear();

public static void main(String[] args){
      Collection<String> list=new ArrayList<>();
      list.clear();
}

3.删除集合中的元素 remove();

package list;
import java.util.ArrayList;
import java.util.Collection;
public class List {
   public static void main(String[] args) {
	// TODO Auto-generated method stub
	   Collection<String> coll=new ArrayList<>();
	    coll.add("java");
	    coll.remove("java");
	    System.out.println(coll);    
   }
}

4.集合的大小 Size();

package list;
import java.util.ArrayList;
import java.util.Collection;
public class List {
   public static void main(String[] args) {
	// TODO Auto-generated method stub
	   Collection<String> coll=new ArrayList<>();
	    coll.add("java");
	    System.out.println(coll.size());    
   }
}

5.集合转数组 toArray();

package list;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
public class List {
   public static void main(String[] args) {
	// TODO Auto-generated method stub
	   Collection<String> coll=new ArrayList<>();
	    coll.add("java");
	    coll.add("web");
	    coll.add("servlet");
	    coll.add("ajax");
	    
	    String[] arr=new String[1];
	    String[] array = coll.toArray(arr);
	    System.out.println(Arrays.toString(array));
   }
}

6.判断集合是否为空 isEmpty();

package list;
import java.util.ArrayList;
import java.util.Collection;
public class List {
   public static void main(String[] args) {
	// TODO Auto-generated method stub
	   Collection<String> coll=new ArrayList<>();
	    coll.add("java");
	    coll.add("web");
	    coll.add("servlet");
	    coll.add("ajax");  
	    System.out.println(coll.isEmpty());	    
   }
}

7.判断集合是否包含指定元素 .contains();

package list;
import java.util.ArrayList;
import java.util.Collection;
public class List {
   public static void main(String[] args) {
	// TODO Auto-generated method stub
	   Collection<String> coll=new ArrayList<>();
	    coll.add("java");
	    coll.add("web");
	    coll.add("servlet");
	    coll.add("ajax");
	    System.out.println(coll.contains("java"));
	    //结果为true   
   }
}

以上就是Collection集合中共性的一些方法,也是所有单列集合可以使用的方法
补充知识点: 迭代器-Iterator(所有单列集合的通用遍历方法)

3.迭代器(Iterator接口)

1.我们先来看一下Iterator的代码实现

package list;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class List {
   public static void main(String[] args) {
	// TODO Auto-generated method stub
	   Collection<String> coll=new ArrayList<>();
	    coll.add("java");
	    coll.add("web");
	    coll.add("servlet");
	    coll.add("ajax");
	   //注意:迭代器也是有泛型约束的,而且泛型类型随集合的泛型类型。
	   //hasNext,判断集合中是否存在下一个元素
	   //next,取出集合中的下一个元素
	   //iterator,集合中获取迭代器的方法
	    Iterator<String> iterator = coll.iterator();
	    while(iterator.hasNext()) {
	    	String next = iterator.next();
	    	System.out.println(next);
	    }
   }
}

2.接下来我们来看一下迭代器的实现原理
先来看一幅图:
在这里插入图片描述

4.增强for循环

增强for循环也就是foreach循环,是JDK1.5之后出现的一个高级for循环,专门用来遍历数组或是集合(底层也是一个Iterator迭代器),简化了迭代器的使用
1.格式:for(集合/数组的数据类型 变量名:集合/数组名字){}

package list;
import java.util.Collection;
import java.util.HashSet;
public class List {
   public static void main(String[] args) {
	// TODO Auto-generated method stub
	//所有的单列集合都可以使用foreach循环
	   Collection<String> coll=new HashSet<>();
	    coll.add("java");
	    coll.add("web");
	    coll.add("servlet");
	    coll.add("ajax8");
	    coll.add("ajax1");
	    coll.add("ajax2");
	    coll.add("ajax3");
	    coll.add("ajax4");
	    coll.add("ajax5");
	    coll.add("ajax6");
	    for(String str:coll) {
	    	System.out.println(str);
	    }
   }
}
5.集合中的泛型

泛型:是指集合中可以存储元素的类型
集合中使用泛型的好处:
1.可以避免数据类型转换的异常,存入的是什么类型,取出来就是什么类型
2.将运行时的异常提升到编译期
弊端:泛型是什么类型,就只能存储什么类型的数据·
泛型呢这里就不详细描述了(但是要去了解),接下来我们重要来学习一下,集合中的数据结构

6. 常见的数据结构:

数据存储常见的数据结构有:栈,数组,队列,链表和红黑树,我们分别来了解一下

6.1栈 (先进后出)

在这里插入图片描述

6.2队列 (先进先出)

在这里插入图片描述

6.3 数组

在这里插入图片描述

6.3 链表结构

1.单链表结构
在这里插入图片描述
2.双向链表
特点:
1.查询慢:
因为每一个节点的指针域是由上一个节点指定,所以每一次查询都需要从头开始
2.增删快:
节点的增加或是删除,并不影响链表的结构,只需要在节点多添加一个新的指针域即可。
3.有序:另一条链表专门负责记录节点顺序,
备注:双向循环链表的头节点只有指针域,不存放数据源

6.4红黑树

在这里插入图片描述

7. Collection下集合的数据结构

0.Vector集合的数据存储结构是可变数组结构
1.ArrayList集合的数据存储是数组结构
2.LinkedList集合的数据存储是双向链表结构
3.hashSet集合的数据存储结构是哈希表结构
4.LinkedHashSet集合是对HashSet集合的增强,是一个有序集合,数据存储结构式哈希表+单链表结构(做顺序的记录)
5.TreeSet集合的数据存储结构是哈希表结构

8. 哈希表结构

哈希表结构就是:数组+链表 或是 数组+红黑树

在这里插入图片描述

总结:以上就是Collection集合的接口之间的关系以及实现类的数据结构,具体的API并没有在本篇中阐述,请查询API篇

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值