JAVA基础(五)

2018-06-19  本文已影响0人  Roper_被注册

集合的由来?

面向对象语言对事务的体现都是以对象的形式,所以为了方便对多个对象的操作,JAVA就提供了集合类

集合和数组的区别?

数组 集合
长度固定 长度可变
存储基本数据类型 只可以存储对象

Collection集合的功能概述?

Collection表示一组对象,这些对象也成为collection元素。
一些collection允许有重复的元素,另一些不允许有重复的元素。
一些collection是有序的,另一些是无序的。

Collection集合存储字符串并遍历?(迭代器)

public static void collectiontest() {
Collection<String> col=new ArrayList();
col.add("eee");
col.add("cvv");
col.add("nvj");
Iterator it = col.iterator(); //迭代器
while(it.hasNext()) {
String s =(String) it.next();
System.out.println(s);
}

Collection集合存储自定义对象并遍历?(迭代器)

public static class Person{
        private String name;

        public Person() {
            super();
        }
        public Person(String name) {
            super();
            this.name = name;
        }

        public String getName() {
            return name;
        }

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

public static void main(String[] args) {
        // TODO Auto-generated method stub
        Collection c=new ArrayList();
        Person p1=new Person("呵呵哒");
        Person p2=new Person("萌萌哒");
        c.add(p1);
        c.add(p2);
        Iterator It=c.iterator();
        while(It.hasNext()) {
            Person s=(Person)It.next();
            System.out.println(s.getName());
        }

List集合的特有功能?

List是有序的collection。可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的证书索引访问元素,并搜索列表中的元素。

List接口成员方法

void add(int index,E element)//添加元素
E remove(int index)//删除元素
E get(int index)//获得元素
E set(int index,E element)//修改元素
ListIterator listIterator()//迭代器
boolean hasPrevious()//ListIterator的方法,用于反向遍历链表,与hasNaxt()方法相同
E previous()//ListIterator的方法,用于反向遍历链表,与next()方法相同返回越过的对象
ConcurrentModificationException//在每个迭代器的方法开始处检查自己改写操作的计数值是否与集合的改写操作计数值一致;如果不一致,抛出ConcurrentModificationException

List集合存储字符串并遍历?(迭代器和普通for)

public static void ListTest() {
    List list=new ArrayList();
    list.add("呵呵呵");
    list.add("好累啊");
    list.add("努力吧");
    for(int i=0;i<list.size();i++) {
        System.out.println("这是for循环的:"+list.get(i));
    }
    ListIterator litor=list.listIterator();
    while(litor.hasNext()) {
        String s=(String)litor.next();
        System.out.println("这是ListIterator的:"+s);
    }
}

并发修改异常出现的原因?解决方案?

A: 出现的现象
迭代器遍历集合,集合修改集合元素
B: 原因
迭代器是依赖于集合的,而集合的改变迭代器并不知道。
C: 解决方案
a:迭代器遍历,迭代器修改(ListIterator)
元素添加在刚才迭代的位置
b:集合遍历,集合修改(size()和get())
元素添加在集合的末尾

常见的数据结构的特点?

栈:Stack<T> 后进先出。
队列:Queue<T> 先进先出。队列在声明的时候可以是泛型。
数组:只合适查询比较频繁,增删较少的情况,对于int类型数据,默认初始值为1;
链表:单链表和双链表,LinkedList list=new LinkedList(),出了头结点,每个节点包含一个数据域和一个指针域,除了头、尾节点,每个节点的指针指向下一个节点。

List集合的子类特点

ArrayList:底层数据结构是数组,查询快,增删慢。线程不安全,效率高。
Vector:底层数据结构是数组,查询快,增删慢。线程安全,效率低。特有addElement(E obj),E elementAt(int index),Enumeration element()三种方法。
LinkedList:底层数据结构是链表,查询慢,增删快,线程不安全,效率高。特有addFirst(E e)、addLast(E e),getFirst()、getLast(),removeFirst()、removeLast() 6中方法。

LinkedList练习

A:LinkedList存储字符串并遍历
B:LinkedList存储自定义对象并遍历

public static void main(String[] args) {
    // TODO Auto-generated method stub
    LinkedList<String> lt=new LinkedList<String>();
    lt.add("String");
    lt.add("interstring");
    Oo oo=new Oo("不好玩","找工作好累");
    lt.add(oo.getIi());
    lt.add(oo.getMm());
    for(int i=0;i<lt.size();i++) {
        System.out.println(lt.get(i));
    }

}

泛型是什么?格式是?好处是?

  1. 泛型类
    public class 类名<泛型类型,……>
  2. 泛型方法
    public<泛型类型>返回类型 方法名(泛型类型)
  3. 泛型接口
    public interface 接口名<泛型类型1……>
  1. 提高了程序的安全性
  2. 将运行期遇到的问题转移到了编译期
  3. 省去了类型强转的麻烦

增强for的格式是?好处是?弊端是?

静态导入的格式是?注意事项是?

可变参数的作用是?格式是?注意事项是?

用下列集合完成代码

Collection
List
ArrayList
Vector
LinkedList

存储字符串并遍历
存储自定义对象并遍历

要求加入泛型,并有增强for遍历。
public static void main(String[] args) {
        // TODO Auto-generated method stub
        LinkedList<String> lt=new LinkedList<String>();
        Collection<String> l1=new ArrayList<String>();
        ArrayList<String> l2=new ArrayList<String>();
        Vector<String> l3=new Vector<String>();
        lt.add("String");
        lt.add("interstring");
        Oo oo=new Oo("不好玩","找工作好累");
        lt.add(oo.getIi());
        lt.add(oo.getMm());
        for(String s:lt) {
            System.out.println("LinkedList:"+s);
        }
        l1.addAll(lt);
        for(String s:l1) {
            System.out.println("Collection:"+s);
        }
        l2.addAll(l1);
        for(String s:l2) {
            System.out.println("ArrayList:"+s);
        }
        l3.addAll(l2);
        for(String s:l3) {
            System.out.println("LinkedLis:"+s);
        }
        
    }   
class Oo{
    public Oo(String ii, String mm) {
        super();
        this.ii = ii;
        this.mm = mm;
    }
    public String getIi() {
        return ii;
    }
    public void setIi(String ii) {
        this.ii = ii;
    }
    public String getMm() {
        return mm;
    }
    public void setMm(String mm) {
        this.mm = mm;
    }
    private String ii;
    private String mm;
}

Set接口

一个不包含重复元素的collection

HasSet类

不保证set的迭代顺序,特别是它不保证该顺序恒久不变。
底层数据结构是哈希表,元素是链表的数组。哈希表依赖于哈希值存储。

LinkedHashSet类

元素有序唯一,由链表保证元素有序,由哈希表保证元素唯一。

TreeSet

使用元素的自然顺序对元素进行排序,或者根据创建set时提供的Comparator进行排序,
底层数据结构是红黑树

编写一个程序,获取10个1至20的随机数,要求随机数不能重复。

Random r=new Random();
        int h;
        TreeSet<Integer> tst=new TreeSet<Integer>();
        for(int i=0;tst.size()<10;i++) {
            h=r.nextInt(20);
                tst.add(h);//TreeSet不允许重复元素,所有不需要判断重复
        }
        for(Integer m:tst) {
            System.out.println(m);
        }

什么是异常

异常就是Java程序在运行过程中出现的错误   

异常的分类

异常分为三类

如何处理异常

  1. try……catch……finally
    其中try用于检测异常,catch用于捕获异常,finally使用结束资源

  2. throw、throws、Throwable

throw throws Throwable
只用在方法体内 用在方法声明后面,跟的是异常类名 它是接口
只能抛出一个异常对象名 可以跟多个异常类名 getMessage()获取异常信息,返回字符串
抛出异常由方法体内的语句处理 抛出异常由方法调用者来处理 printStackTrace()获取异常类名和异常信息,以及异常位置,返回void
执行throw则一定抛出了某种异常 throws表示出现异常的一种可能性,不一定发生 printStackTrace(PrintStram s)通常保存在文档中
  1. 当异常发生时候,后续程序需要执行就用try,不需要就用throws

编译时期异常和运行时期异常的区别

编译时期异常,JAVA程序必须显示处理,否则程序会发生错误。
运行时期异常,JAVA程序无需显示处理,也可以和编译时期异常一样处理。

finally关键字的特点

被finally控制的语句体一定会执行
特殊情况:在执行到finally之前jvm退出了。

finally相关的面试题

final,finally和finalize的区别
final用于修饰类和变量,修饰过的类不能被继承,修饰过的变量就变成个常量
finally是异常处理中使用的。用于不管初步出现异常都必须处理的事情,列如关闭连接。
finalize是方法名,是JAVA的垃圾清理机制,用于清理对象内存,在垃圾收集器删除对象之前调用。

如果catch里面有return语句,请问finally的代码还会执行吗?如果会,请问是在return前还是return后。
会执行,在return之前

File的构造方法

Public File(String pathname)
Public File(String parent,String child)
Public File(File parent,String child)

File的成员方法

获取指定目录下指定后缀名的文件名称

判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称
File file=new File("E:\\");
        String[] arr=file.list();
        for(String s:arr) {
            if(s.endsWith(".jpg")) {
                System.out.println(s);
            }
        }
上一篇下一篇

猜你喜欢

热点阅读