JAVA-集合的介绍与使用

集合:

集合基本结构

Collection是所有集合的顶层接口,包含了List和Set接口,

List有实现类ArrayList,LinkedList,Vector

Set有实现类HashSet  TreeSet


集合优点:
一般用来存储对象,没有长度限制,不需要在创建集合时就赋予长度,可以存储任何类型
eg:

Collection col  =  new ArrayList();//存放数据
col.add(12);
col.add("你好");
col.add('男');
col.add(12.45);
col.add(true);
col.add(d);

那我要是,需要数组长度那?
length是行不通的所以
需要size

System.out.println(col.size());

需要掌握的方法:
add()  添加 向集合中添加元素
size()  大小,获得集合的长度

能输出长,那么我们就要遍历一个数据

要遍历要使用for,但不是以前的基本结构了

for (Object 类名 : col) {
    System.out.println(obj);
}

//现在存放的有各种各样的数据类型,那么就放个通用的数据类型Object
//col是你从哪里遍历的就用哪的


要使用forEach遍历

1.遍历的数据类型   Object 

2.给要遍历的元素起一个变量名  obj 

3.需要遍历的集合  col

类名说的直白点与数组相比


1.数据类型
2.obj相当于数组的arr[i] 
3.要遍历的数组

Collection<String> strCollection =  new ArrayList<String>();

这个叫<泛型> 
可以在此处规定集合的数据类型,

那也是可以放东西的

strCollection.add("张三");
strCollection.add("李四");
strCollection.add("小红");


,接着就是遍历

for(String s : strCollection){
    System.out.println(s);
}

//s是起的类名,目的就是输出的是上面的东西

再来一个
那么我要问了

Collection<int> intCol = new ArrayList<int>();

能不能这样写?
不能!
注意:泛型只能是类,如果是基本数据类型的数据,
那么必须存放为基本数据类型对应的包装类

应该是

Collection<Integer> intCol = new ArrayList<Integer>();

里面的东西也是

intCol.add(1);
intCol.add(5);

那么我要写个东西了

intCol.remove(1);

那么现在数据输出的是5了
有人就问了,那我完全可以把1删了
是!可以,但在今后的工作中的数据是别人给你的数据
你是不能轻易动别人的数据的,
是需要在你自己的地方进行删除的或者说操作的

那么,如果上面有两个一模一样的

intCol.add(1);

我又写了个

intCol.remove(1);

那么会怎么样?
会删除第一个,
写两个intCol.remove(1);
就删两个呗。。。。

 

List有序可重复

先写一个

Set<String> set = new HashSet<String>();

记得要加<String>

set.add("超");
set.add("级");
set.add("无");
set.add("敌");
System.out.println(set.size());

//得到的结果为4
那我要是写s.remove(1);
这时“超”就会被删除,
那我要是就像知道第3个是什么呢?

System.out.println(s.get(2));

 

List的常用方法:

add()  向list集合中添加数据

size() 求取list集合的长度

remove(object) 根据内容移除

remove(index) 根据下标移除集合中的元素

get(index)  根据下标获得集合中的指定对象

set(index,val)  根据下标,重新设置某元素


而s.set(1,"凹凸曼");
那么会输出什么?
就会输出“凹凸曼级无敌”
“超”就被“凹凸曼”所替代了

 

Set   无序不可重复

常用方法:

add();向set集合中添加一个元素

remove()移除set集合中的指定元素,根据内容移除

size()获得set集合的长度
也是这几个
那Set有什么特点?
可以这样。。

set.add("飞");
set.add("飞");
set.add("飞");

这样我输出

System.out.println(set.size());

会输出1
因为他是无序不可重复的,这就是他的特点。。

 

最后那,我要搬出最后的一个知识点

ArrayList,LinkedList,Vector的区别:

ArrayList基于数组存储结构:查询速度较快,插入和删除速度较慢,线程不安全的

LinkedList基于链式存储结构:查询速度较慢,插入和删除速度较快,线程不安全的

Vector 线程安全的,但是已不建议使用


那么何为组式何为链式???
可以这样说,组式就是一排的箱子,这些箱子是连体的箱子,每个箱子都放一些东西,或不满状态或满状态,
这样就是查询速度较快,但删除速度比较慢,以为,一但要删中间的一个,后面的要都变序号

而链式是一堆大大小小的箱子,有多大就有多少东西,这些箱子之间是用“线”(也叫接口)连接的,
这样便于删除,但不方便查询,因为要删除只需要把接口改一下即可,不需要再改位置。
但要查询需要从头开始查,所以及不方便。

好了,这次也说的不少了,就这些吧!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

槐序二十四

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

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

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

打赏作者

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

抵扣说明:

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

余额充值