6collection 和迭代器和list和数组和增强for

64 阅读1分钟
Collection  
add  
给定的对象 
Collection<String> coll = new ArrayList<>();
 add(E e) : 把给定的对象添加到当前集合中 。
 addAll(Collection con): 所有元素添加到调用方法的集合对象中
 clear() :清空集合中所有的元素。
 remove(E e) : 把给定的对象在当前集合中删除。   有相同元素,只能删除一个
 contains(Object obj) : 判断当前集合中是否包含给定的对象。
 isEmpty() : 判断当前集合是否为空。
 int size() : 返回集合中元素的个数。
public Object[] toArray() : 把集合中的元素,存储到数组中。 

## 注意事项


for (int i = 0; i < coll.size(); i++) {
    //报错了: 把ArrayList集合对象已经当成了Collection接口使用
    //然而Collection接口中,并没有定义含有索引的方法
    //coll.get(i);
}
//toArray()方法: 把集合元素复制到Object数组中
Object[] array = coll.toArray();
//遍历数组
for (int i = 0; i < array.length; i++) {
    System.out.println(array[i]);
} 
for(集合存储元素的类型 变量名称 : 集合) {
    ...
} 

迭代器

并不是所有的集合都有索引,所以以前使用for+get(索引)的方式遍历集合,就不通用了 
所以增加了使用迭代器遍历集合对象  coll.iterator() 
获取迭代器接口Iterator的实现类对象it   hasNext方法,判断是否具有下一个元素
5.如果有: 迭代器接口Iterator的实现类对象it调用next方法,获取下一个元素并输出  
while (it.hasNext()) {
    //5.如果有: 迭代器接口Iterator的实现类对象it调用next方法,获取下一个元素并输出
    String str = it.next();
    System.out.println(str); 
System.out.println("姓名: " + stu.getName() + ", 年龄: " + stu.getAge()); 
} 

list

常用实现类ArrayList集合                -------------使用ArrayList集合-------------- 
ArrayList<数据类型> 集合名称 = new ArrayList<数据类型>();
ArrayList<String> list = new ArrayList<>(); 
    特点:
        1.底层数据结构:数组
        2.查询快: 元素有索引,元素内存空间连续分析
        3.增删慢:
            数组长度不可改变
            需要频繁创建新数组,拷贝元素,销毁老数组
        4.线程不同步,不安全,效率高

常用实现类Vector集合                -------------不使用Vector集合--------------
    特点:
        1.底层数据结构:数组
        2.查询快: 元素有索引,元素内存空间连续分析
        3.增删慢:
            数组长度不可改变
            需要频繁创建新数组,拷贝元素,销毁老数组
        4.线程同步,安全,效率低 
list特点:
    1.有序: 保证存入和取出元素的顺序是一致的
    2.有索引: 可以通过索引的方式获取元素
    3.可重复: 可以存储相同的元素 
List子接口,除了用于父接口的方法外,额外添加与索引相关的方法  
add(int index,E element)  get(int index)   set替换(int index,E element)   remove(int index) 移除列表中指定位置的元素,并返回被移除之前的元素。
增删改查: C(增: Create)R(查:Read)U(改: Update)D(删: Delete) 
List<String> list = new ArrayList<>();  
list.add(new Integer(300)); 
 3.向Collection集合对象coll中添加多个Student对象
coll.add(new Student("张三", 18));

数组

数组定义格式:
    数据类型[] 数组名称 = new 数据类型[长度];
    int[] arr = new int[3]; 
    ```
for(数组存储元素的类型 变量名称 : 数组) {
    ...
} 
1.变量名称不是用来存储数组的索引值的,而是用来存储数组中的每个元素的
2.增强for遍历数组底层使用的是普通for
3.增强for遍历数组时,请不要对数组元素进行增删改的操作,否则出现问题,自己解决
4.增强for遍历数组快捷键:
    数组名.for  

可变参数

可变参数: 可以变化的参数  
注意事项:
    1.可变参数的本质就是数组
    2.调用方法时,可以传递参数列表,可以传递数组,还可以不传参数
    3.方法参数列表中的可变参数,只能定义在参数列表最后
    4.方法参数列表中的可变参数只允许有一个 
public static void main(String[] args) {

    System.out.println(getSum(10, 20, 30, 40));

    System.out.println(getSum(new int[]{10, 20, 30, 40}));
}

//定义方法,获取多个int数字之和

public static int getSum(int... array) {
    int sum = 0;
    for (int i = 0; i < array.length; i++) {
        sum += array[i];
    }
    return sum;
} 
//把字符串按照-进行切割,返回字符串数组
//String[] array = "2-3-4-5-6-7-8-9-10-J-Q-K-A".split("-"); 

linkedlist

常用实现类LinkedList集合                -------------使用LinkedList集合--------------
    特点:
        1.底层数据结构:双向链表
        2.增删快: 元素分配不连续的,添加/删除元素,只需要找到位置,再修改对应节点保存地址的地方
        3.查询慢:
            要么从前向后查,要么从后向前查
        4.线程不同步,不安全,效率高
LinkedList集合操作链表头和尾的方法
  addFirst: 添加头节点 addLast 添加尾节点 
  getFirst() :返回此列表的第一个元素。 getLast() :返回此列表的最后一个元素。
   removeFirs 删除头节点 removeLast()  删除尾节点 
LinkedList<String> linked = new LinkedList<>();  
  LinkedList集合中可以用来模拟栈结构(先进后出)特点的方法
      push(E e)   底层原理: addFirst
pop()   底层原理: removeFirst  
LinkedList<String> linked = new LinkedList<>();