集合的各种操作
Stack 栈
栈的数据结构是先进后出 先被存入道栈里面的数据最后出去
//如何创建出一个栈对象
// <泛型>
Stack <Object> stack = new Stack<E>();
//如何给 栈里面存入数据
Object object = new Object();
stack.push(object);
//取出栈里面的值
//当然这里取出的值是在取出之前最后放进去的值 取出来之后给他进行删除
Object o = stack.pop();
//查看栈里面的值对应栈的位置
//去出来的就是当前的位置 假如说要是没有传进来的值的话就直接返回-1
stack.search(5);
//取出栈里面最顶部的数据并不对他进行删除
//注 当栈是空的话取出对象的时候会包空指针异常 注意使用
Object peek = stack2.peek();
//测试此堆栈是否为空 返回的值是波尔值 false代表不为空 true代表空
boolean empty = stack.empty();
//如何遍历给栈里面添加对象
Stack<Integer> stack = new Stack<>();
for (int i = 0 ; i < 10 ; i++){
stack.push(i);
}
//如何遍历把栈里面的值全部都取出来
while (!stack.empty()){
System.out.println(stack.peek());
}
知识点
栈也是List的一种实现 他继承于 Vector
List<Integer> list = new Stack<>();
List 集合
知识点
List集合的特点 他是可以有重复数据的集合
Set不可以有重复的数据
他们继承于 Collections
List的四种实现
//第一种和第二种都不是线程安全的
//第一种ArrayList 他底层是数组 默认的初始长度是10
//他的每次扩容是1.5贝进行扩容
//扩容的机制当容器存不下的时候进行扩容 比如默认长度是10他 插入11的时候就会触发扩容
List<Integer> arrayList = new ArrayList<Integer>();
//第二种LinkedList 是没有默认长度的 底层是链表格式
//他是对数据进行修改的时候速度比较块 但是在进行数据的增加的时候他是比较蛮的
//要走完前面的所有数据 在把新加的数据存入进去
List<Integer> linkedList = new LinkedList<Integer>();
//第三种第四中都是线程安全的
//Vector 实现了一个动态数组。是可实现自动增长的对象数组。
//vector和arrayList的比较
//都是采用数组格式存储数据,索引数据块插入数据慢
//ArrayList会比Vector快,他是非同步的
//涉及到多线程,Vector是同步更好一些
List<Integer> vector = new Vector<Integer>()
//Stack也是通过数组实现的 也是线程安全的
List<Integer> list = new Stack<Integer>();
List常用的方法
//对集合添加数据
arrayList.add(1);
//判断集合里面是否存在传入的那个值 arrayList.contains(5)
boolean contains = arrayList.contains(5);
//获取出集合里面的元素 根据下标开始获取 从0开始 假如说要是超出范围就报错
Integer integer = arrayList.get(0);
//获取出对应的元素下标 假如说要是集合里面没有对应的值的话就直接返回-1
int i = arrayList.indexOf(10);
//判断集合是否是空 返回的是boolean类型的 是空就返回false 不是空就返回true
boolean empty = arrayList.isEmpty();
//根据下标删除对应的元素
arrayList.remove(0);
//set(int index,Object o)覆盖元素 修改对应元素下标里的值
arrayList.set(0,7);
//返回集合的长度
arrayList.size();
//给集合返回给数组
Integer [] arr = (Integer[]) arrayList.toArray();
//清空集合
arrayList.clear();
//判断有没有元素
arrayList.isEmpty()
而size()返回有几个元素
如果判断一个集合有无元素
建议用isEmpty()方法.这清晰,简明
list!=null跟!list.isEmpty()有什么区别?
这就相当与,你要喝水,
前面就是判断是不是连水杯都没有,
后面就是判断水杯里面没有水,
连盛水的东西都没有,
这个水从何而来?
所以一般的判断是
if(list!=null && !list.isEmpty()){
这个里面取list中的值
}else{
做其他处理
}
https://blog.csdn.net/Baple/article/details/8604585?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3.control
Set集合
三种实现方式
第一种 HashSet
//第一种
//HashSet类按照哈希算法来存取集合中的对象,存取速度比较快。
//Set中是不能出现重复数据的。
//Set中可以出现空数据。
//Set中的数据是无序的。
Set<String> hashSet = new HashSet<String>();
for(int i= 0;i<5;i++){
hashSet.add(i+"");
}
hashSet.add("2"); //重复数据,不会写入
hashSet.add(null); //可以写入空数据
//引用的迭代器来进行循环遍历
Iterator<String> iter = hashSet.iterator();
while(iter.hasNext()){
System.out.println(iter.next()); //输出是无序的
}
/*这段执行之后的打印输出是:
null
3
2
1
0
4
*/
第二种 LinkedHashSet
//LinkedHashSet是有序的(不同于HashSet)。
//查询性能好 但是插入性能稍微逊色于HashSet
Set<Integer> set = new LinkedHashSet<>();
for(int i= 0;i<5;i++){
set.add(i+"");
}
set.add("2"); //重复数据,不会写入
set.add(null); //可以写入空数据
Iterator<String> iter = set.iterator();
while(iter.hasNext()){
System.out.println(iter.next()); //输出是有序的
}
/*输出打印如下:
0
1
2
3
4
null
*/
第三种 TreeSet
//不能写入空数据
//写入的数据是有序的。
Set<String> set = new TreeSet<String>();
for(int i= 0;i<5;i++){
set.add(i+"");
}
set.add("2"); //重复数据,不会写入
//set.add(null); //不可以写入空数据
Iterator<String> iter = set.iterator();
while(iter.hasNext()){
System.out.println(iter.next()); //输出是有序的
}
/*输出打印为:
0
1
2
3
4
*/
Set集合常用的方法
//添加
set.add(1);
set.add(2);
set.add(3);
//删除指定元素
set.remove(3);
// 判断集合中是否包含某一个元素
set.contains(a);
//判断集合是否为空
set.isEmpty();
//清空set
set.clear();
//返回set集合的大小
set.size();
//for-each遍历整个集合
for(Integer value:set) {
System.out.println(value);
}
//iterator方法
Iterator<Integer> value=set.iterator();
while(value.hasNext()) {
int s=value.next();
System.out.println(s);
}
Hash 集合
等待更新。。。