集合框架1 笔记分享

集合框架1

程序是来源于或超脱于现实生活的。

程序是用于进行数据的计算处理的

→ 变量:可以储存单一的数据

→ 数组:可以存储相同类型的一组数据

  • 类型必须形同
  • 长度一经定义则无法改变

→ 多维数组:比一维数组存储数据方式更加灵活

→ 类和[对象]:对象可以用来存储有关联的数据(对象)

→ 对象数组:变相解决了数组的类型必须相同问题

→ 集合:解决数组的长度不可变问题(长度可变数组)

1.了解Java集合框架体系结构

在这里插入图片描述

Iterable ← Collection(Interface): 集合的顶级接口,可允许重复数据出现,数据存储相对无序。

  • List(Interface):可重复,有序

    • ArrayList(Class)
    • LinkedList(Class)
    • Vector(Class)
  • Set(Interface):不可重复,无序

    • HashSet(Class)
    • TreeSet(Class)

Map: 键值对数据存储方式,一种特殊的数据存储,以后我们学习很多技术都大量采用了此种数据结构

  • HashMap(class)

  • HashTable(class)

  • Properties(class)

2.会使用ArrayList存取数据

ArrayList底层是数组

  • boolean add(Object obj); 向列表追加元素

  • void add(int index,Object obj); 向指定的索引添加元素,原有的元素依次后移

  • int size(); 获取集合的长度

  • Object get(int index); 根据索引获取元素

  • boolean remove(Object obj); 删除指定的元素

  • Object remove(int index); 根据索引删除元素

  • boolean contains(Object obj); 判断集合中是否有指定的元素

  • boolean isEmpty(); 判断集合是否为空(集合长度为0)

  • void clear(); 清空集合

  • List subList(int from,int end); 从指定索引开始到指定索引结束截取子集合(左闭右开)

List<任何类型> Arrays.asList(任何类型数据…);

public static void main(String[] args) {
    List<News> list = new ArrayList<>();
    News news1 = new News(1, "大新闻", "张三");
    News news2 = new News(2, "新大闻", "李四");
    News news3 = new News(3, "新闻大", "王五");
    
    // 添加元素
    list.add(news1);
    list.add(news2);
    list.add(news3);
    
    // 向指定索引添加元素  原有元素会依次后移
    News news4 = new News(4, "小新闻", "赵六");
    list.add(0, news4);
    
    // 集合的遍历
	// int size() 获取集合的长度  元素的数量
    for(int i = 0; i < list.size(); i++) {
        // 根据索引获取指定的元素
        News news = list.get(i);
        System.out.println(news);
    }
    
    // 根据索引进行删除   可以返回被删除的元素
    News remove = list.remove(0);
    System.out.println("被删除的元素为:"+remove);
    
    // 根据数据进行删除  返回值就是删除成功/失败
    //		list.remove(news2);
    
    // 判断是否包含在集合中
    System.out.println("新闻1是否在集合中:"+list.contains(news1));
   
    list.clear(); // 清空集合
    
    // 判断集合是不是空的
	System.out.println("集合是不是空的:"+list.isEmpty()); 
}

3.会使用LinkedList存取数据

LinkedList底层是链表(特殊的数据结构)

省略List中的通用方法

  • void addFirst(Object obj); 在最前添加元素
  • void addLast(Object obj); 在最后添加元素
  • Object removeFirst(); 删除最前的元素
  • Object removeLast(); 删除最后的元素
  • Object getFirst(); 获取最前面的元素
  • Object getLast(); 获取最后面的元素
public static void main(String[] args){
    // 创建对象  命名:newsList     <Student>  students
    List<News> newsList = new LinkedList<>();
    News news1 = new News(1, "大新闻", "张三");
    News news2 = new News(2, "新大闻", "李四");
    newsList.add(news1);
    newsList.add(news2);
    
    // 添加头条新闻
    News news3 = new News(3, "新闻大", "王五");
	newsList.addFirst(news3);
	// 添加尾部数据  newsList.addLast(news3);
    
    // 删除头部和尾部数据
	// newsList.removeFirst();
	// newsList.removeLast();
    
    // 首尾获取数据
    News first = newsList.getFirst();
    News last = newsList.getLast();
    
    // 遍历集合
    /*for (News news : newsList) {
			System.out.println(news);
	  }*/
    for (int i = 0; i < newsList.size(); i++) {
        News news = newsList.get(i);
        System.out.println(news);
    }
}

4.ArrayList和LinkedList的区别【面试题】

ArrayList底层是数组结构,因为是数组结构,所以在查询的时候比较快(有索引/下标),而添加/删除比较慢(创建新数组)

LinkedList底层是链表结构,因为是链表结构,所以添加/删除比较快(指针域切换),查询比较慢(没有索引/下标)

5.会使用Set存取数据

特点:无序、唯一

它的无序是相对的无序

如果Set存储引用数据类型,注意重写对应的equals()和hashCode()方法,否则无法实现去重效果

public void main(String[] args){
    Set<News> newsSet = new HashSet<>();
    News news1 = new News(1, "新闻1", "作者1");
    News news2 = new News(2, "新闻2", "作者2");
    News news3 = new News(1, "新闻1", "作者1");
    newsSet.add(news1);
    newsSet.add(news2);
    newsSet.add(news3);
    
    // 迭代器遍历
    Iterator<News> itor = newsSet.iterator();
    while(itor.hasNext()) {
        News next = iterator.next();
        System.out.println(next);
    }
}

6.泛型

集合的泛型必须使用包装类/引用类型
byte -> Byte(包装类)
short -> Short(包装类)
[ int -> Integer(包装类) ]
long -> Long(包装类)
float -> Float(包装类)
double -> Double(包装类)
boolean -> Boolean(包装类)
[ char -> Character(包装类) ]

注:笔记思路来自查老师!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值