集合

1、请简述集合和数组的异同点?

数组一旦定义,长度就固定了,不能在原数组中增删元素。集合的长度时可以改变的,就是可以在原集合中增删元素,但集合只能存储引用数据类型,不存储基本数据类型。数组中只能存储同一种数据类型的元素,集合中可以存储多种类型的数据

2、把今天讲解的集合中的方法,在API中找到,并用自己的话描述

答案:

​ Collection:

​ public boolean add(E e)

往集合中添加元素

​ public boolean addAll(Collection c)

把一个集合中的元素归并当另一个集合中

​ public void clear()

清空集合中的元素

public boolean remove(Object o)

移除集合中的某个元素

public boolean removeAll(Collection c)

移除两个集合中的交集元素,从调用的集合中移除

public boolean contains(Object o)

判断集合中是否包含某个元素

public boolean containsAll(Collection c)

判断一个集合是否包含另一个集合的所有元素

public boolean isEmpty()

判断一个集合是否为空

public Iterator iterator()

迭代器,可以判断集合中是否有元素,再去遍历集合中的元素

public boolean retainAll(Collection<?> c)

获取两个集合中的交集元素,并判断集合中是否发生变化

public int size()

获取集合的长度

public Object[] toArray()

把集合转换为数组

​ List:

​ public void add(int index, Object element)

根据索引添加元素

​ public Object remove(int index)

根据索引移除元素

​ public Object set(int index, Object element)

根据索引改变元素

​ public Object get(int index)

返回列表中指定位置的元素。

​ public ListIterator listIterator()

列表迭代器(List集合特有的迭代器)

3、请简述迭代器是一个什么玩意?

Iterator是一个内部类,可以访问外部类的成员

4、请简述常见的数据结构有哪些?

栈,队列,数组,链表,树,哈希表

5、请简述ArrayList、Vector、LinkedList三者的特点?

ArrayList:底层数据结构是数组,查询快,增删慢,线程不安全,效率高

Vector:底层数据结构是数组,查询快,增删慢,线程安全,效率低

LinkedList:底层数据结构是链表,查询慢,增删块,线程不安全,效率低

6、请简述并发修改异常产生的原因?如何解决?

在使用迭代器对集合中的元素进行增删时会发生并发修改异常。因为迭代器已经确定了集合的长度,如果在迭代的过程中对集合中的元素进行增删,会改变集合原有的长度,从而会抛出异常,在迭代器方法具体的实现中可以找到。

解决方法:可以用ListIterator中的add方法进行增删,也可以用for循环

B:看程序写结果(写出自己的分析理由),程序填空,改错,看程序写结果。

1、给出以下代码,请问该程序的运行结果是什么?如有问题,请说明原因。

class Demo {

public static void main (String[] args) {

Collection c = new ArrayList();

c.add(“JavaSE”);

c.add(“JavaWeb”);

c.add(“JavaEE”);

c.add(“JavaEE”);


Iterator it = c.iterator();

while (it.hasNext() ) {

System.out.println( it.next() );

}

}

}

结果:

JavaSE
JavaWeb
JavaEE
JavaEE

2、给出以下代码,请问该程序的运行结果是什么?如有问题,请说明原因。

class Demo {

public static void main (String[] args) {

Collection c = new ArrayList();

c.add(“JavaSE”);

c.add(“JavaWeb”);

c.add(“JavaEE”);

c.add(“JavaEE”);


for (int i =0; i < c.size(); i++) {

String str = (String)c.get(i);

System.out.println(str);

}

}

}

Collection中不含有get方法,不能直接获取集合中的元素

3、给出以下代码,请问该程序的运行结果是什么?如有问题,请说明原因。

class Demo {

public static void main (String[] args) {

List list = new ArrayList();

list.add(“JavaSE”);

list.add(“JavaWeb”);

list.add(“JavaEE”);

list.add(“JavaEE”);


for (int i =0; i < list.size(); i++) {

String str = (String)list.get(i);

System.out.println(str);

}

}

}

结果:

JavaSE
JavaWeb
JavaEE
JavaEE

4、给出以下代码,请问该程序的运行结果是什么?如有问题,请说明原因。

class Demo {

public static void main (String[] args) {

List list = new ArrayList();

list.add(“JavaSE”);

list.add(“JavaWeb”);

list.add(“JavaEE”);

list.add(“JavaEE”);


for (Iterator it = list.iterator(); it.hasNext(); ) {

System.out.println( it.next() );

}

}

}

JavaSE
JavaWeb
JavaEE
JavaEE

5、给出以下代码,请问该程序的运行结果是什么?如有问题,请说明原因。

class Demo {

public static void main (String[] args) {

List list = new ArrayList();

list.add(“JavaSE”);

list.add(“JavaWeb”);

list.add(“JavaEE”);

list.add(“JavaEE”);


for (Iterator it = list.iterator(); it.hasNext(); ) {

String str = (String)it.next();

if (“JavaWeb”.equals( str )) {

list.add(“Android”);

}

}

System.out.println( list );

}

}

出现并发修改异常,因为迭代器已经确定了集合的长度,如果在迭代的过程中对集合中的元素进行增删,会改变集合原有的长度,从而会抛出异常

6、给出以下代码,请问该程序的运行结果是什么?如有问题,请说明原因。

class Demo {

public static void main (String[] args) {

List list = new ArrayList();

list.add(“JavaSE”);

list.add(“JavaWeb”);

list.add(“JavaEE”);

list.add(“JavaEE”);


for (ListIterator lit = list.listIterator(); lit.hasNext(); ) {

String str = (String)lit.next();

if (“JavaWeb”.equals( str )) {

lit.add(“Android”);

}

}

System.out.println( list );

}

}

[JavaSE, JavaWeb, Android, JavaEE, JavaEE]

7、给出以下代码,请问该程序的运行结果是什么?如有问题,请说明原因。

class Demo {

public static void main (String[] args) {

List list = new ArrayList();

list.add(“JavaSE”);

list.add(“JavaWeb”);

list.add(“JavaEE”);

list.add(“JavaEE”);

System.out.println( list );


list.remove(1);

System.out.println( list );

list.set(1, “Android”);

String str = (String)list.get(1);

System.out.println( str );

}

}

[JavaSE, JavaWeb, JavaEE, JavaEE]
[JavaSE, JavaEE, JavaEE]
Android

C:编程题

1、请编写程序,将3个学生的信息存储到数组中,并遍历数组,获取得到每一个学生信息

public class Student {
    public String name;
    public String sex;

    public String getName () {
        return name;
    }

    public void setName (String name) {
        this.name = name;
    }

    public String getSex () {
        return sex;
    }

    public void setSex (String sex) {
        this.sex = sex;
    }

    public Student (String name, String sex) {
        this.name = name;
        this.sex = sex;
    }
}
class ArrayStudent{
    public static void main (String[] args) {
        Student s1 = new Student("王五", "男");
        Student s2 = new Student("李四", "女");
        Student s3 = new Student("刘浩", "男");
        Student[] students = new Student[3];
        students[0]=s1;
        students[1]=s2;
        students[2]=s3;
        for(int i=0;i<students.length;i++){
            Student student = students[i];
            System.out.println(student.getName()+"==="+student.getSex());
        }
    }
}

2、请编写程序,存储3个手机对象到Collection集合中

a) 把集合转换成数组后遍历

b) 使用迭代器进行遍历

public class Phone {
    public String name;
    public int prince;
    public String getName () {
        return name;
    }
    public void setName (String name) {
        this.name = name;
    }
    public int getPrince () {
        return prince;
    }
    public void setPrince (int prince) {
        this.prince = prince;
    }
    public Phone (String name, int prince) {
        this.name = name;
        this.prince = prince;
    }
}
class PhoneArray{
    public static void main (String[] args) {
        Phone p1 = new Phone("小米", 3000);
        Phone p2 = new Phone("华为", 3500);
        Phone p3 = new Phone("苹果", 7000);
       Collection collection = new ArrayList();
       collection.add(p1);
       collection.add(p2);
       collection.add(p3);
       //把集合转化为数组
        Object[] objects = collection.toArray();
        for(int i=0;i<objects.length;i++){
            Phone phones = (Phone) objects[i];
            System.out.println(phones.getName()+"===="+phones.getPrince());
        }
        System.out.println("------------------");
        Iterator iterator = collection.iterator();
        while (iterator.hasNext()){
            Phone next = (Phone) iterator.next();
            System.out.println(next.getName()+"===="+next.getPrince());
        }
    }
}

3、请编写程序,存储3个学生对象到List集合中,

a) 使用迭代器进行遍历

b) 使用size()和get()方法结合进行遍历

c) 使用列表迭代器进行遍历

public class Student {
    public String name;
    public String sex;
    public String getName () {
        return name;
    }
    public void setName (String name) {
        this.name = name;
    }
    public String getSex () {
        return sex;
    }
    public void setSex (String sex) {
        this.sex = sex;
    }
    public Student (String name, String sex) {
        this.name = name;
        this.sex = sex;
    }
}
class ArrayStudent{
    public static void main (String[] args) {
        Student s1 = new Student("王五", "男");
        Student s2 = new Student("李四", "女");
        Student s3 = new Student("刘浩", "男");
        List list = new ArrayList();
        list.add(s1);
        list.add(s2);
        list.add(s3);
        Iterator iterator = list.iterator();
        while (iterator.hasNext()){
            Student next = (Student) iterator.next();
            System.out.println(next.getName()+"===="+next.getSex());
        }
        System.out.println("---------------");
        for(int i=0;i<list.size();i++){
            Student o = (Student) list.get(i);
            System.out.println(o.getName()+"===="+o.getSex());
        }
        System.out.println("---------------");
        ListIterator listIterator = list.listIterator();
        while (listIterator.hasNext()){
            Student next = (Student) listIterator.next();
            System.out.println(next.getName()+"==="+next.getSex());
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值