泛型类 泛型方法 Vector LinkedList

1、请简述泛型是什么?有什么用?在哪里用?

2、请把今天讲解的方法,在API中查找到,并用自己的话进行描述

答案:

​ Vector

​ public void addElement(E obj)

Vector特有的的添加方法

​ public E elementAt(int index)

返回对应索引的元素

public boolean removeElement(Object obj)

根据集合中的元素删除元素

public void removeElementAt(int index)

根据集合中的索引删除元素

​ public void setElementAt(E obj, int index)

根据集合中的索引改变对相应的元素

​ public Enumeration elements()

Vector中特有的迭代器

​ Enumeration

​ public boolean hasMoreElements()

判断集合是否有元素

​ public Object nextElement()

获取集合中的元素

​ LinkedList:底层数据结构是链表,查询慢,增删快,线程不安全

​ public void addFirst(E e)

将指定元素添加到列表的开头

​ public void addLast(E e)

将指定元素添加到列表的末尾

​ public E getFirst()

获取列表中的第一个元素

​ public E getLast()

获取列表中的最后一个元素

​ public E removeFirst()

移除列表中的第一个元素

​ public E removeLast()

移除列表中的最后一个元素

3、请简述List<? extends T>和List<? super T>之间有什么区别?

List<? super T>向上限定:?代表T本身或者T的父类

List<? extends T>向下限定:?代表T本身或者T的子类

4、请简述如何编写一个泛型方法,让它能够接受泛型参数并返回泛型类型?并举例

public class MyDemo1 {
    public <P> void show(P p){//泛型方法
        System.out.println(p);
    }
}
class MyTest1{
    public static void main (String[] args) {
        MyDemo1 demo1 = new MyDemo1();
        demo1.show(100);
        demo1.show("acvacav");
    }

5、请简述Java中如何使用泛型编写带有参数的类?并举例

在定义一个类的时候,可以给这个类给一个或者多个泛型(可以明确,也可以不明确),在这个类中提供set和get方法,在创建对象时可以给泛型明确具体的类型

public class MyDemo<S,I> {
    private S s;
    private I i;
    public S getS () {
        return s;
    }
    public void setS (S s) {
        this.s = s;
    }
    public I getI () {
        return i;
    }
    public void setI (I i) {
        this.i = i;
    }
}
class MyTest{
    public static void main (String[] args) {
        MyDemo<String, Integer> stringIntegerMyDemo = new MyDemo<>();
        stringIntegerMyDemo.setS("aaa");
        stringIntegerMyDemo.setI(100);
        String s = stringIntegerMyDemo.getS();
        Integer i = stringIntegerMyDemo.getI();
        System.out.println(s);
        System.out.println(i);
    }
}

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

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

class Test {

private T name;

public T getName() {

return name;

}

public void setName(T name){

this.name = name;

}

public static void main (String[] args) {

Test strTest = new Test();

strTest.setName(“aaa”);

System.out.println( strTest.getName() );


Test intTest = new Test();

intTest.setName(1234);

System.out.println( intTest.getName() );

}

}

结果:

aaa
1234

2、给出以下代码,如有问题,请说明原因。

需求:定义一个方法,该方法用于打印出任意参数化类型的集合中的所有数据

public static void printCollection (Collection cols) {

for (Object obj : cols) {

System.out.println( obj );

}

}

Collection参数类型不需要给出泛型

class  Test{
        public static void printCollection(Collection cols){
            for (Object obj : cols) {
                System.out.println(obj);
            }
        }
}
class MyTest3{
    public static void main (String[] args) {
        Collection<Integer> integers = new ArrayList<>();
        integers.add(1);
        integers.add(2);
        integers.add(3);
        Test.printCollection(integers);
        LinkedList<String> strings = new LinkedList<>();
        strings.add("aaa");
        strings.add("bbbb");
        strings.add("cccc");
        Test.printCollection(strings);
    }
}

3、 给出以下代码,如有问题,请说明原因。

class Animal {}

class Dog extends Animal{}

class Cat extends Animal{}

class GenericDemo {

public static void main(String[] args) {

Collection c = new ArrayList();

Collection c1 = new ArrayList();

Collection c2 = new ArrayList();

//改:Collection c2 = new ArrayList<>();

Collection c3 = new ArrayList();

//改:Collection c3 = new ArrayList<>();


Collection<? extends Animal> c4 = new ArrayList();

//改:向下限定Collection<? extends Animal> c4 = new ArrayList<Animal的子类或者本身>();

Collection<? extends Animal> c5 = new ArrayList();

Collection<? extends Animal> c6 = new ArrayList();

Collection<? extends Animal> c7 = new ArrayList();


Collection<? super Animal> c8 = new ArrayList();

Collection<? super Animal> c9 = new ArrayList();

Collection<? super Animal> c10 = new ArrayList();

Collection<? super Animal> c11 = new ArrayList();

//改:向上限定Collection<? super Animal> c10 = new ArrayList<Animal的本身或者父类>();

Collection<? super Animal> c11 = new ArrayList<Animal的本身或者父类>();

}

}

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

interface Inter {

public abstract void method();

}

class SubEx implements Inter {

public void method() {

System.out.println(“SubEx”);

}

}

class GenericTest {

public static void main (String[] args) {

List list = new ArrayList();

SubEx se = new SubEx();

list.add(se);


printList1(list);

printList2(list);

printList3(list);

printList4(list);

}

public static void printList1 (List<? extends Inter> list) {

for (Inter in : list) {

in.method();

}

}

public static void printList2 (List<?> list) {

for (Object obj : list) {

((Inter)obj).method();

}

}

public static void printList3 (List list) {//List< SubEx> list)

for (Inter in: list) {

in.method();

}

}

public static void printList4 (List list) {//List list

for (Object obj : list) {

((Inter)obj).method();

}

}

}

结果:

SubEx
SubEx
SubEx
SubEx

C:编程题

1、请编写程序,将自定义对象存储到ArrayList集合,使用泛型并遍历

a) 使用迭代器遍历、

b) 使用列表迭代器遍历

c) 使用size()和get()方法遍历

d) 使用增强for遍历

public class MyArrayList {
    public static void main (String[] args) {
        ArrayList<Integer> integers = new ArrayList<>();
        integers.add(100);
        integers.add(1000);
        integers.add(1);
        integers.add(2);
        //列表迭代器遍历
        ListIterator<Integer> integerListIterator = integers.listIterator();
        while (integerListIterator.hasNext()) {
            Integer next = integerListIterator.next();
            System.out.println(next);
        }
        System.out.println("-------------------");
        //迭代器遍历
        Iterator<Integer> iterator = integers.iterator();
        while (iterator.hasNext()) {
            Integer next = iterator.next();
            System.out.println(next);
        }
        System.out.println("-------------------");
        //使用size()和get()方法遍历
        for(int i=0;i<integers.size();i++){
            Integer integer = integers.get(i);
            System.out.println(integer);
        }
        System.out.println("-------------------");
        //forEach方法遍历
        integers.forEach(new Consumer<Integer>() {
            @Override
            public void accept (Integer integer) {
                System.out.println(integer);
            }
        });
        System.out.println("-------------------");
        //新式for循环
        for (Integer integer : integers) {
            System.out.println(integer);
        }
    }
}

2、请编写程序,将自定义对象存储到Vector集合,使用泛型并遍历

a) 使用迭代器遍历

b) 使用Vector特有的迭代器遍历

c) 使用size()和get()方法遍历

d) 使用增强for遍历

public class MyVector {
    public static void main (String[] args) {
        Vector<Integer> vector = new Vector<>();
        vector.add(100);
        vector.add(1000);
        vector.add(1);
        vector.add(2);
        //使用迭代器遍历
        Iterator<Integer> iterator = vector.iterator();
        while (iterator.hasNext()) {
            Integer next = iterator.next();
            System.out.println(next);
        }
        System.out.println("--------------");
        //使用Vector特有的迭代器遍历
        Enumeration<Integer> elements = vector.elements();
        while (elements.hasMoreElements()) {
            Integer integer = elements.nextElement();
            System.out.println(integer);
        }
        System.out.println("-----------------");
        //使用size()和get()方法遍历
        for (int i = 0; i < vector.size(); i++) {
            Integer integer1 = vector.get(i);
            System.out.println(integer1);
        }
        System.out.println("-----------------");
        //使用增强for遍历
        for (Integer integer2 : vector) {
            System.out.println(integer2);
        }
    }
}

3、请编写程序,将自定义对象存储到LinkedList集合,使用泛型并遍历

a) 使用迭代器遍历

b) 使用列表迭代器遍历

c) 使用size()和get()方法遍历

d) 使用增强for遍历

public class MyLinkedList {
    public static void main (String[] args) {
        LinkedList<Integer> linkedList = new LinkedList<>();
       linkedList.add(100);
       linkedList.add(1000);
       linkedList.add(1);
       linkedList.add(2);
       //使用迭代器遍历
        Iterator<Integer> iterator = linkedList.iterator();
        while (iterator.hasNext()) {
            Integer next = iterator.next();
            System.out.println(next);
        }
        System.out.println("----------------");
        //使用列表迭代器遍历
        ListIterator<Integer> integerListIterator = linkedList.listIterator();
        while (integerListIterator.hasNext()) {
            Integer next = integerListIterator.next();
            System.out.println(next);
        }
        System.out.println("----------------");
        // 使用size()和get()方法遍历
        for (int i = 0; i < linkedList.size(); i++) {
            Integer integer = linkedList.get(i);
            System.out.println(integer);
        }
        System.out.println("----------------");
        //使用增强for遍历
        for (Integer integer : linkedList) {
            System.out.println(integer);
        }
    }
}

4、请编写程序,完成N个数 相加的功能,并测试

public class Plus {
    public static void main (String[] args) {
        int sum= add(1,12,4,5,6);//传入的参数就是要相加的数
        System.out.println(sum);
    }
    private static int add (int... n) {//可变参数
        int sum=0;
        for (int i : n) {//新式for循环
            sum+=i;
        }
        return sum;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值