集合_java基础知识笔记系列

16 篇文章 0 订阅

集合

1、概念:集合提供一种存储空间可变的存储模型,存储的数据容量可变
2、ArrayList,可调整大小的数组实现,一种特殊的数据类型泛型。

集合体系结构

在这里插入图片描述
在这里插入图片描述

泛型

1、概述:泛型:是JDK5中引入的特性,它提供了编译时类型安全检测机制,该机制允许在编译时检测到非法的类型;它的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数,就是将类型由原来的具体的类型参数化,然后在使用/调用时传入具体的类型
这种参数类型可以用在类、方法和接口中,分别被称为泛型类、泛型方法、泛型接口
2、格式
(1)<类型>
(2)<类型1,类型2,…>
3、泛型优点:将运行时的问题提前到了编译时期,并避免了强制类型转换

Collection集合

1、概述:是单列集合的顶层接口,表示为一组数组,这些对象被称为Collection的元素,JDK不提供此接口的任何直接实现方法,它提供更具体的子接口实现
2、Collection集合的常用方法
在这里插入图片描述
3、Collection集合的遍历
Iterator是集合专用的迭代器iteratoriterator();
实例:

public static void main(String[] args){
   //创建集合对象
   Collection<String> arr=new ArrayList<String>();
   //添加元素
   arr.add("hello");
   arr.add("world");
   arr.add("java");
   Iterator(String> it=arr.iterator();
   
   //hasNext()判断集合内是否还有元素
   while(it.hasNext()){
   //next获取下一个值
     String s = it.next();
     System.out.println(s);
  }
}

2、增强for循环
(1)作用:简化数组和Collection集合的的遍历,其内部原理是一个Iterator迭代器
(2)格式:

for(元素数据类型 变量名:数组或者Collection集合){

}

(3)实例:

int[] arr={1,2,3,4,5};
for(int i:arr){
    System.out.println(i);
}

并发修改异常

1、异常名:ConcurrentModificationException
2、原因:迭代器遍历过程中,通过集合对象修改了集合中的元素,造成了迭代器获取元素中判断预期修改值和实际修改值不一致。
3、解决:用for循环遍历,然后用集合对象进行对应的操作即可。

Listlterator

1、ListIterator为列表迭代器,List集合特有的迭代器
2、常用方法
(1)E next() :放回迭代中的下一个元素
(2)Boolean hasNext():如果迭代具有更多元素,则返回
(3)E previous():返回列表中的上一个元素
(4)Boolean hasprevious:如果此列表迭代器在相反方向遍历列表时具有更多元素,则返回true
(5)void add(E e)将指定元素插入列表

List集合

1、概述:
List集合为有序集合,用户可以精准的控制列表中的每个元素插入的位置,用户可以通过整数引索访问元素并搜索列表中的元素
2、特点:
(1)有序,读写的元素时顺序一致。
(2)可重复,存储的元素可重复
3、List集合常用方法在这里插入图片描述
4、实例:

/*
    List集合特有方法:
        void add(int index,E element):在此集合中的指定位置插入指定的元素
        E remove(int index):删除指定索引处的元素,返回被删除的元素
        E set(int index,E element):修改指定索引处的元素,返回被修改的元素
        E get(int index):返回指定索引处的元素
 */
public class ListDemo02 {
    public static void main(String[] args) {
        //创建集合对象
        List<String> list = new ArrayList<String>();

        //添加元素
        list.add("hello");
        list.add("world");
        list.add("java");

        //void add(int index,E element):在此集合中的指定位置插入指定的元素
//        list.add(1,"javaee");
        //IndexOutOfBoundsException
//        list.add(11,"javaee");

        //E remove(int index):删除指定索引处的元素,返回被删除的元素
//        System.out.println(list.remove(1));
        //IndexOutOfBoundsException
//        System.out.println(list.remove(11));

        //E set(int index,E element):修改指定索引处的元素,返回被修改的元素
//        System.out.println(list.set(1,"javaee"));
        //IndexOutOfBoundsException
//        System.out.println(list.set(11,"javaee"));

        //E get(int index):返回指定索引处的元素
//        System.out.println(list.get(1));
        //IndexOutOfBoundsException
//        System.out.println(list.get(11));

        //输出集合对象
//        System.out.println(list);

        //遍历集合
//        System.out.println(list.get(0));
//        System.out.println(list.get(1));
//        System.out.println(list.get(2));

        //用for循环改进遍历
        for (int i=0; i<list.size(); i++) {
            String s = list.get(i);
            System.out.println(s);
        }
    }
ArrayList

1、ArrayList是List集合的常用子类,ArrayList底层是数组构成,查询快,增删慢
2、常用方法:

方法名说明
public ArrayList()创建一个空的集合对象
public boolean add(E e)将指定的元素追加到此集合的末尾
public void add(int index,E element)在此集合中的指定位置插入指定的元素
public Boolean remove(object o)删除指定元素,返回删除是否成功
public E remove (int index)删除指定引索处的元素,返回被删除的元素
public E set(int index,E element)修改指定引索处的元素,返回被修改的元素
public E get(int index)返回指定引索处的元素
public int size()返回集合中的元素的个数
LinkedList

1、LinkedList底层数据结构是链表,查询慢,增删快
2、常用方法:
在这里插入图片描述

Set集合

1、Set集合是Collection单列集合的子类,相对于List集合它不能包含重复元素,且没有带引索的方法无法使用普通的for循环进行遍历
2、遍历set集合内的字符串

public class SetChar{
   public static void main(String[] args){
   //创建集合对象
      Set<String> set=new HashSet<String>();
      //添加元素
      set.add("Hello");
      set.add("world");
      set.add("Java");
      //遍历集合
      for(String s:set){
        System.out.println(s);
        }
  }
}
HashSet集合

1、概述:为Set集合的子类,底层数据结构为哈希表,是无序的,读写顺序不一致
2、哈希值:是JDK根据对象地址或者字符串或者数字算出来的int类型的数值。
3、Hashset集合保证元素唯一,添加一个元素过程:
在这里插入图片描述
要保证元素唯一性,需重写hashCode和equals方法

LinkedHashSet集合

1、概述:哈希表和链表实现的Set接口,具有可预测的迭代次序,存储和取出顺序一致,不能有重复元素

TreeSet集合

1、概述:元素有序,但不是存储和取出顺序而是按照一定的规则进行排序,具体排序方式取决于构造方法

Map集合

1、概述:interface Map<K,V> 其中K为键的类型,V为值得类型,Map集合为双列集合
如:

学号姓名
1李四
2张三
3王五

2、Map集合的常用方法
在这里插入图片描述

3、实例:

public class MapDemo {
    public static void main(String[] args) {
        //创建集合对象
        Map<String,String> map = new HashMap<String,String>();

        //V put​(K key, V value) 将指定的值与该映射中的指定键相关联
        map.put("1","王祖蓝");
        map.put("2","张曼玉");
        map.put("3","王祖贤");
        map.put("3","柳岩");

        //输出集合对象
        System.out.println(map);
    }

HashMap

1、概述: HashMap:它根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。 HashMap最多只允许一条记录的键为null,允许多条记录的值为null。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

创制造机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值