【List,Set,数据结构,Collections】

Java集合体系:

A).Collection(单列集合): 比较重要
|–List(接口–新增4个方法):1).有序的;2).可以存储重复元素;
|–ArrayList(子类):数组实现
|–LinkedList(子类–新增2个方法):链表实现
|–Set(接口–无特有方法):1).无序的;2).不能存储重复元素;
|–HashSet(子类):哈希表实现
|–LinkedHashSet(子类):链表、哈希表实现。
B).Map(双列集合):
第一章:List集合
List接口的介绍:
元素是有序的,可以存储重复的元素, 元素的存入顺序和取出顺序一致.
List接口的常用方法:
1)增:
Public void add (int index,E element) 将指定的元素添加到该集合的指定位置上。
代码举例:
//建立一个main方法
Public static void main(String[]args)
//创建一个集合
ArrayList strList = new ArrayList<>();
//把元素添加到集合中
strList.add(“刘德华”);
strList.add(“周星驰”);
strList.add(“周润发”);
//成员变量.方法名,选择添加的成员,加上索引值,添加到指定位置上
strList.add(1, “张学友”)
//打印strList, 添加成功.
2).删

     Public E remove(int index)  移除列表中指定位置的元素,返回的是被移除的元素

代码举例:
//建立一个main方法
Public static void main(String[]args)
//创建一个集合
ArrayList strList = new ArrayList<>();
//把元素添加到集合中
strList.add(“刘德华”);
strList.add(“周星驰”);
strList.add(“周润发”);
//移除索引为1的元素
System.out.println(“移除索引1的元素为:”+strList.remove)
System.out.println(“移除元素后集合的内容为:”+strList)
3).改
Public E set(int index, E element) 用指定元素替换集合指定位置的元素,并返回值的更新前的元素
代码举例;

           //建立一个main方法
          Public static void main(String[]args)
              //创建一个集合
      ArrayList<String> strList = new ArrayList<>();
              //把元素添加到集合中
        strList.add(“刘德华”);

strList.add(“周星驰”);
strList.add(“周润发”);
// 将一个元素替换成一个新的元素
// 将周星驰替换成赵本山
System.out.println(“将周星驰替换成赵本山”+strList.set1,”赵本山”)
System.out.println(strList);
4).查
Public E get (int index) 返回集合中指定位置的元素
第二章:数据结构:
什么是数据结构?
存储数据的方式
数据结构的作用:
不同的存储方式,会影响增丶删丶改丶查操作的效率
数组:
数组在内存中是连续的,里面的每一个元素都是一个挨着一个一个依次存储的,可以通过索引访问里面的元素.
特点; 查询快.增删慢
1.添加:可能涉及到数组扩容,所以慢
2.删除:删除元素后,要将后续元素依次前移一位,所以慢
3.查询:查询list.get…内部将…做为数组的索引直接获取,所以快
数组结构 链表:
什么是链表?
由一系列节点node(链表中每一个元素称为节点)组成,节点可在运行时动态生成,
链表的特点:
多个节点,通过地址链接
查询慢, 增丶删快
1.添加:只要赋值几个引用即可,所以快。
2.删除:只要将自己的next赋值给前点的next即可,所以快
3.查询:总是要从一端开始,向另一端查询,所以慢
数据结构 栈和队列:
栈(stack)又称堆栈, 不允许在其他任何位置添加,删除,查找等工作.
先进后出,
这里有俩个名词需要注意一下;
压栈:就是存元素,把元素存到栈的顶端位置,栈中已有元素依次向栈底方向移动一个位置.
弹栈:就是取元素,把栈中顶端位置的元素取出来,栈中已有元素依次向栈顶方向移动一个位置.
队列:
就是生活中去排队做一件事,特点是先进先出, 受限的线性表,添加,删除各占一端。
数组结构 红黑树

              我来偷张图,别告诉别人哦

第三章:List的子类
ArrayList集合
ArrayList内部; 数组实现———-查询快,增删慢;
代码举例:

ArrayList list = new ArrayList<>();
list.add(“黄磊”);
list.add(“黄渤”);
list.add(“黄晓明”);
//遍历方式:增强for(底层:迭代器)
for(String s : list){
System.out.println(s);
}
//遍历方式:size() + get()
for(int i = 0;i < list.size(); i++){
String s = list.get(i);
System.out.println(s);
List的子类 LinkedList集合:
LinkedList:链表实现—查询慢;增删快;
这里特有的方法我们需要掌握俩个:
1)push(); 模拟压栈;
2)poll(); 模拟弹栈,(获取第一个元素,并删除第一个元素);
示例代码:

public static void main(String[] args) {
LinkedList list = new LinkedList<>();

//压栈
list.push("aaa");
list.push("bbb");
list.push("ccc");

//弹栈
while (list.size() > 0) {
    System.out.println(list.poll());
}

}
第四章:Set接口 HashSet储存字符串:
特点:无序的,不能存储重复元素。
Set接口 HashSet存储自定义对象:
抄袭代码:

1).定义Student类(注意:重写:hashCode()和equals())
public class Student {
private String name;
private int age;
….
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age &&
Objects.equals(name, student.name);
}

@Override
public int hashCode() {
    return Objects.hash(name, age);
}

}
2).测试类:
public static void main(String[] args) {
HashSet set = new HashSet<>();

set.add(new Student("张三", 18));
set.add(new Student("李四", 19));
set.add(new Student("李四", 19));//先判断hashCode(),相同,再判断equals(),相同:不存

System.out.println("集合大小:" + set.size());

}

Set接口 数据结构 哈希表

特点:
1).采用:数组 + 链表 + 红黑树实现
2).验证元素的唯一性:
1).先判断元素的hashCode()
不同:存
相同:再判断元素的equals()
不同:存
相同:不存

Set接口_LinkedHashSet的特点及使用:

1).LinkedHashSet:它链表、哈希表的实现;
它是Set的特例:有序的哈希表;
2).示例代码:
public static void main(String[] args) {
LinkedHashSet set = new LinkedHashSet<>();

set.add("aaa");
set.add("bbb");
set.add("ccc");
set.add("ccc");//不存储重复元素

for (String s : set) {
    System.out.println(s);//有序的
}

}

Set接口_可变参数
public class Demo {
public static void main(String[] args) {
//编译前
sum();
sum(10,20);
sum(10,3,24,324,321,45,43,24,324,325,42,431,43,52,432,5,435,134,2,65,62,45,325,46,5425);

    //编译后
    /*sum(new int[0]);
    sum(new int[]{10,20});
    sum(new int[]{10,3,24,324,321,45,43,24,324,325,42,431,43,52,432,5,435,134,2,65,62,45,325,46,5425});

*/

}
//编译前
public static int sum(int ... nums) {
    int sum = 0;
    for (int n : nums) {
        sum += n;
    }
    return sum;
}
//编译后
/*public static int sum(int[] nums) {
    int sum = 0;
    for (int n : nums) {
        sum += n;
    }
    return sum;
}*/

}
其它说明:
1).在一个方法中最多只能有一个“可变参数”,而且必须位于参数列表的末尾:
public static int sum(int a,String b,int … nums){//OK的
}
public static int sum(int…nums,int a,int b){//错误
}
public static int sum(String…s,int … nums){//错误
}
Collections工具类_常用功能:
1).java.util.Collections(工具类):里面包含了对Collection集合操作的一些工具性方法。
2).常用方法:
1).public static boolean addAll(Collection c, T… elements) :往集合中添加一些元素。
2).public static void shuffle(List

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值