集合:
集合基本结构
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 线程安全的,但是已不建议使用
那么何为组式何为链式???
可以这样说,组式就是一排的箱子,这些箱子是连体的箱子,每个箱子都放一些东西,或不满状态或满状态,
这样就是查询速度较快,但删除速度比较慢,以为,一但要删中间的一个,后面的要都变序号
而链式是一堆大大小小的箱子,有多大就有多少东西,这些箱子之间是用“线”(也叫接口)连接的,
这样便于删除,但不方便查询,因为要删除只需要把接口改一下即可,不需要再改位置。
但要查询需要从头开始查,所以及不方便。
好了,这次也说的不少了,就这些吧!