java高级特性-集合框架(一)

认识集合

在开发应用程序时,如果想存储多个同类性的数据,可以使用数组来实现,但是使用数据存在一些明显的缺陷。
例如 :

1.数组的长度不能改变;

2.数据类型单一;

3.数组采用在内存中分配连续空间的存储方式存储,根据元素信息查找是效率比较低,需要多次比较。

1.了解Java集合框架体系结构(为了解决长度不可变的问题)

Java集合框架提供了一套性能优良、使用方便的接口和类,它们都位于Java.util包中。
在这里插入图片描述
List接口
Collection接口是最基本的集合接口,可以存储一组不唯一、无序的对象。List接口继承自Collection接口,是有序集合。

使用ArrayList存取数据

ArrayList<存储的数据的类型>    集合名 = new ArrayList<存储的数据的类型>();

boolean add(Object object); 向列表中追加元素

void add(int index,Object object); 向列表中的指定索引添加元素

int size(); 获取列表的长度/元素个数

Object get(int index); 根据索引获取对应的元素

boolean contains(Object obj); 判断是否包含某个元素
boolean remove(Object obj); 删除指定的元素

Object remove(int index); 根据索引删除元素 且返回被删除的元素值
来自于ArrayList的父级接口们:

toArray() 转换为数组

clear() 清除所有的元素

isEmpty() 判断是否为空集合 / list.size() == 0

iterator() 迭代器

集合泛型的特点:它是用来约束/声明集合元素的数据类型的。
1.泛型必须是引用数据类型,如果是存储基本数据类型值,则必须将其转为对应引用数据类型(包装类型)。
byte -> Byte

short -> Short

int -> Integer

long -> Long

float -> Float

double -> Double

char -> Character

boolean -> Boolean

会使用LinkedList存取数据
底层是链表。
LinkedList linkedList = new LinkedList<>();

List接口中的API它也拥有,

void addFirst(Object obj); 将元素添加到第一个

void addLast(Object obj); 将元素添加到最后一个

Object getFirst(); 获取第一个

Object getLast(); 获取最后一个

Object removeFirst(); 删除第一个

Object removeLast(); 删除最后一个

public static void main(String[] args) { // 创建集合对象 List(有序 不唯一) -> ArrayList(可变数组)
// <> 泛型 规范需要添加
// News[] news = new News[];
List list = new ArrayList();

  // 存储数据
  // news[0] = xxx;  news[1] = xxx;
  News news1 = new News(1, "震惊!巴黎圣母院失火!", "xxx");
  News news2 = new News(2, "震惊!LOL玩家和DOTA玩家竟然在众人面前互斥对方算什么男人!", "xxx");
  News news3 = new News(3, "是中国人必须转!不转不是中国人!", "xxx");
  
  // boolean add = list.add(news1);
  // 存储数据
  list.add(news1); 
  list.add(news2);
  list.add(news3);
  
  // 获取总数
  // news.length()      length  len size lenOf...
  int size = list.size();
  System.out.println("新闻的总数:"+size);
  
  News news4 = new News(4, "震惊!xxx半夜起床走向窗外....", "xxx");
  // 向指定的索引位置添加数据 原有数据依次后移
  list.add(0, news4);
  // 遍历集合
  // 遍历数组  因为数组有索引 所以采用遍历索引 遍历数组
  /*
   * for(int i = 0; i < news.length; i++){
   *   news[i]
   * }
   */
  for(int i = 0; i < list.size(); i++) {
   // 集合根据索引获取数据
   News news = list.get(i);
   System.out.println(news.getTitle()+" ");
  }
  
  System.out.println("是否包含xxx相关新闻:"+list.contains(news4));
 
  // 删除李天义数据
  // list.remove(news4);
  // 删除指定索引的数据 并且返回被删除的数据
  list.remove(0);
  System.out.println("是否包含xxx相关新闻:"+list.contains(news4));
  Collections.shuffle(list);
 }`

了解ArrayList和LinkedList的区别?

ArrayList:底层是数组结构,所以因为是数组,则拥有索引,在遍历或随机查找时比较快,但是又因为是数组,数组长度不可变,每一次增删都是要创建新的数组,比较慢。

LinkedList:底层是链表结构,链表结构存储每一个元素由两部分组成,数据域和指针域,它没有索引。多个元素之间,通过指针域指向连接。 因为没有索引,所以查找比较慢,但是因为是链表所以在增删时只需要切换指针指向即可(尤其首尾更快)。

ArrayList的索引是固定的。类似于座位号 找到16号座位。

LinkedList的索引是根据元素位置计算出来的,并非固定的。 找到第16个座位。

使用Set集合存取数据

Set的特点:无序 唯一

例:

public class Demo {
	public static void main(String[] args){
		//List系列集合  ArrayList  LinkedList
		List<String> list = Arrays.asList("hehe","xixi");
		//创建Set集合
		Set<String > set = new HashSet<>();
		set.add("hehe");
		  set.add("xixi");
		  set.add("meme");
		  // 1.普通for循环   利用索引来遍历
		  /*for (int i = 0; i < list.size(); i++) {
   			String str = list.get(i);
   			System.out.println(str);
 		   }*/
 		    // 2.增强for循环【推荐】  遍历出每一个元素值
  		/*for(String str : list) {
   			System.out.println(str);
  		  }*/
  		  System.out.println("-------------------");
  		  for (String str : set) {
   			System.out.println(str);
  		  }*/
  		  // 3.迭代器
		  Iterator<String> iterator = list.iterator();
		  // iterator.hasNext() 判断是否有下一个元素
		  // iterator.next() 获取下一个元素
		
		while(iterator.hasNext()) {
		   String value = iterator.next();
		   System.out.println(value);
		  }
		  System.out.println("---------------------");
		  Iterator<String> setIterator = set.iterator();
		  while(setIterator.hasNext()) {
			   String str = setIterator.next();
			   System.out.println(str)
		 }
	}		 	   
} 
			
		
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值