32.List

集合和数组都是存储对象的。
数组长度固定,可以存储基本数据类型
集合长度可变,只能存储对象

1.add方法的参数类型是Object,以便于接收任意类型对象。
2.集合中存储的都是对象的引用(地址)

什么是迭代器呢?
其实就是集合的取出元素的方式。

public class Collection_01 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        //method_2();
        
        //method_get();
        
        base_method();

    }
    
    public static void method_2(){
        ArrayList al1=new ArrayList();
        
        al1.add("java01");
        al1.add("java02");
        al1.add("java03");
        al1.add("java04");
        
        ArrayList al2=new ArrayList();
        
        al2.add("java01");
        al2.add("java02");
        al2.add("java05");
        al2.add("java06");
        
        //al1.retainAll(al2);//取交集,al1中只会保留和al2中相同的元素
        
        //al1.removeAll(al2);//去除al1中和al2相同的元素
        
        al1.addAll(al2);//al1中包含两个集合所有元素
        sop("al1:"+al1);
        sop("al2:"+al2);
    }
    
    public static void method_get(){
        ArrayList al1=new ArrayList();
        
        al1.add("java01");
        al1.add("java02");
        al1.add("java03");
        al1.add("java04");
        
        Iterator it=al1.iterator();//获取迭代器,用于取出集合中的元素
        while(it.hasNext()){
            sop(it.next());
        }
        
        /*for(Iterator it=al1.iterator();it.hasNext();){//循环完毕it不存在了,比while节约内存
            sop(it.next());
        }*/        
    }
    
    public static void base_method(){
        //创建一个集合容器。使用Collection接口的子类。ArrayList
        ArrayList al=new ArrayList();
        
        //1.添加元素
        al.add("java01");//add(Object obj)
        al.add("java02");
        al.add("java03");
        al.add("java04");
        
        //打印集合
        sop(al);
        
        //2.获取个数,集合长度
        sop("al.size="+al.size());
        
        //3.删除元素
        al.remove("java02");
        //删除后的集合
        sop(al);
        //删除后的长度
        sop("al.size="+al.size());
        
        //清空集合
        //al.clear();
        
        //4.判断元素
        sop("java03是否存在"+al.contains("java03"));
        sop("集合是否为空"+al.isEmpty());
    }
    
    public static void sop(Object obj){
        System.out.println(obj);
    }
}

 

Collection
  --List:元素是有序的,元素可以重复,因为该集合体系有索引
    --ArrayList:底层的数据结构使用的数组结构。特点:查询速度很快,但是增删稍慢(角标变化)。线程不同步
    --LinkedList:底层使用的是链表数据结构。特点:增删速度很快,查询很慢。
    --Vector:底层是数组数据结构。线程同步(被ArrayList替代了)
  --Set:元素是无序的,元素不可以重复

List:
特有方法:凡是可以操作角标的方法都是该体系特有的方法。
  增:
    add(index,element);
    addAll(index,Collection);
  删:
    remove(index);
  改:
    set(index,element);
  查:
    get(index);
    subList(from,to);
    listIterator();

List集合特有的迭代器 ListIterator是Iterator的子接口。
在迭代时,不可以通过集合对象的方法操作集合中的元素,因为会发生ConcurrentModificationException并发修改异常。
所以在迭代时,只能用迭代器的方法操作元素,可是Iterator的方法是有限的,只能对元素进行判断hasNext()、取出next()、删除remove()的操作。
如果想要其他的操作,如添加、修改等,就需要使用其子接口,ListIterator。该接口只能通过List集合的listIterator方法获取。

public class List_02 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        //method();
        
        method_listIterator();

    }
    
    //List特有方法
    public static void method(){
        ArrayList al=new ArrayList();
        
        //添加元素
        al.add("java01");
        al.add("java02");
        al.add("java03");    
        sop("原集合是:"+al);
        
        //在指定位置添加元素
        al.add(1,"java04");
        sop("添加一个元素后的集合是:"+al);
        
        //删除指定位置的元素
        al.remove(2);
        sop("删除一个元素后的集合是:"+al);
        
        //修改元素
        al.set(2,"java07");
        sop("修改一个元素后的集合是:"+al);
        
        //通过角标获取元素
        sop("获取的元素是:"+al.get(1));
        
        //获取所有元素
        for(int x=0;x<al.size();x++){
            sop("al("+x+")="+al.get(x));
        }
        
        //迭代器获取所有元素
        for(Iterator it=al.iterator();it.hasNext();){
            sop("next:"+it.next());
        }
        
        //通过indexOf获取对象的位置
        sop(al.indexOf("java04"));
        
        //子列表
        List sub=al.subList(1, 3);
        sop(sub);
    }
    
    //listIterator(列表迭代器)
    public static void method_listIterator(){
        ArrayList al=new ArrayList();
        
        //添加元素
        al.add("java01");
        al.add("java02");
        al.add("java03");    
        
        sop(al);
        
        /*
        //在迭代过程中,准备添加或删除元素
        Iterator it=al.iterator();
        //Itetator只有hasNext() next() remove()三个方法
        
        while(it.hasNext()){
            Object obj=it.next(); 
            if(obj.equals("java02")){
                //al.add("java08");//同一组元素,既用集合操作,又用迭代器操作,并发修改异常ConcurrentModificationException
                it.remove();//将java02从集合中删除
            }
            sop("obj:="+obj);//引用在集合中移除了,元素在内存当中
        }
        */
        
        ListIterator li=al.listIterator();
        while(li.hasNext()){
            Object obj=li.next();
            if(obj.equals("java02")){
                //添加
                //li.add("java09");
                
                //修改
                li.set("java06");
            }
        }
        
        //逆向遍历
        while(li.hasPrevious()){
            sop("previous:"+li.previous());
        }
        
        sop(al);
    }

    public static void sop(Object obj){
        System.out.println(obj);
    }
}

 

Enumeration 枚举是Vector特有的取出方式
发现枚举和迭代器很像。
其实枚举和迭代是一样的。枚举的名称以及方法都过长,所以被迭代器取代了。

public class Vector_03 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Vector v=new Vector();
        
        v.add("java01");
        v.add("java02");
        v.add("java03");
        v.add("java04");
        
        Enumeration en=v.elements();
        
        while(en.hasMoreElements()){
            System.out.println(en.nextElement());
        }
    }

}

 

LinkedList特有方法:
  addFirst();
  addLast();

  getFirst(); 获取元素,但不删除元素
  getLast();

  removeFirst(); 获取元素,并删除元素。如果集合中没有元素,会出现NoSuchElementException
  removeLast();

  JDK1.6出现了替代方法。
  offerFirst();
  offerLast();

  peekFirst();
  peekLast();

  pollFirst();
  pollLast();

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        LinkedList link=new LinkedList();
        
        link.addFirst("java01");
        link.addFirst("java02");
        link.addFirst("java03");
        link.addFirst("java04");
        
        sop(link);
        
        //sop(link.getFirst());
        
        //link.removeLast();
        //sop(link);
        
        while(!link.isEmpty()){
            sop(link.removeFirst());
        }
        
        link.removeLast(); //NoSuchElementException
        
    }
    
    public static void sop(Object obj){
        System.out.println(obj);
    }

}

 

练习:使用LinkedList模拟堆栈或者队列数据结构
堆栈:先进后出 如同一个杯子
队列:先进先出 如同一个水管,先进管子先出来

public class LinkedList_05 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        DuiLie dl=new DuiLie();
        
        dl.myAdd("java01");
        dl.myAdd("java02");
        dl.myAdd("java03");
        dl.myAdd("java04");
        
        sop(dl.myGet());
        sop(dl.myGet());
        sop(dl.myGet());
        sop(dl.myGet());
        
        sop(dl.isNull());
        
        sop("-------------------");
        
        DuiZhan dz=new DuiZhan();
        
        dz.myAdd("java01");
        dz.myAdd("java02");
        dz.myAdd("java03");
        dz.myAdd("java04");
        
        sop(dz.myGet());
        sop(dz.myGet());
        sop(dz.myGet());
        sop(dz.myGet());
    }
    
    
    
    public static void sop(Object obj){
        System.out.println(obj);
    }

}

class DuiLie{
    private LinkedList link;
    
    DuiLie(){
        link=new LinkedList();
    }
    
    public void myAdd(Object obj){
        link.addFirst(obj);
    }
    
    public Object myGet(){
        return link.removeLast();
    }
    
    public boolean isNull(){
        return link.isEmpty();
    }
}

class DuiZhan{
    private LinkedList link;
    
    DuiZhan(){
        link=new LinkedList();
    }
    
    public void myAdd(Object obj){
        link.addFirst(obj);
    }
    
    public Object myGet(){
        return link.removeFirst();
    }
}

 

去除ArrayList中重复元素

public class ArrayList_06 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ArrayList al=new ArrayList();
        
        al.add("java01");
        al.add("java02");
        al.add("java03");    
        al.add("java01");
        al.add("java04");
        al.add("java05");
        al.add("java03");
        al.add("java04");
        al.add("java06");    
        
        System.out.println(al);
        
        
        System.out.println(singleElement(al));
    }

    public static ArrayList singleElement(ArrayList al){
        
        //定义一个临时容器
        ArrayList newAl=new ArrayList();
        
        Iterator it=al.iterator();
        while(it.hasNext()){
            Object obj=it.next();
            
            if(!newAl.contains(obj)){
                newAl.add(obj);
            }
        }
        return newAl;
    }
        
}

 

将自定义对象作为元素存到ArrayList集合中,并去除重复元素。

比如:存人对象,同姓名同年龄,视为同一人,为重复元素

思路:
  1.对人描述,将数据封装进入人对象
  2.定义容器,将人存入
  3.取出

List集合判断元素是否相同,依据的是元素的equals方法。调一次contains,运行一次equals。remove调用的仍然是equals

public class ArrayList_07 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ArrayList al=new ArrayList();
        
        al.add(new Person("lisi01",22)); //al.add(Object obj);==> Object obj=new Person("lisi",33);
        al.add(new Person("lisi02",23));
        al.add(new Person("lisi03",24));
        al.add(new Person("lisi04",25));
        al.add(new Person("lisi02",22));
        al.add(new Person("lisi04",25));
        
        al=singlePerson(al); //比较对象,用的是Object的equals方法,比较的地址值,而每个对象地址都不一样,所以全获取
        
        //打印所有
        Iterator it=al.iterator();
        while(it.hasNext()){
            Person p=(Person) it.next();
            sop("姓名是:"+p.getName()+",年龄为:"+p.getAge());
        }
    }
    
    public static ArrayList singlePerson(ArrayList al){
        ArrayList newAl=new ArrayList();
        
        Iterator it=al.iterator();
        while(it.hasNext()){
            Object obj=it.next();
            
            if(!newAl.contains(obj)){
                newAl.add(obj);
            }    
        }
        return newAl;
    }
    
    
    public static void sop(Object obj){
        System.out.println(obj);
    }

}
class Person{
    private String name;
    private int age;
    
    Person(String name,int age){
        this.name=name;
        this.age=age;
    }
    
    public String getName(){
        return name;
    }
    
    public int getAge(){
        return age;
    }
    
    public boolean equals(Object obj){ //该方法自动被调用
        
        if(!(obj instanceof Person)){
            return false;
        }
        Person p=(Person) obj;
        System.out.println(this.name+"..."+p.name);
        
        return this.name.equals(p.name) && this.age == p.age;
    }
    /* 每个进来的对象都与之前的元素比较一遍
    lisi02...lisi01
    lisi03...lisi01
    lisi03...lisi02
    lisi04...lisi01
    lisi04...lisi02
    lisi04...lisi03
    lisi02...lisi01
    lisi02...lisi02
    lisi04...lisi01
    lisi04...lisi02
    lisi04...lisi03
    lisi04...lisi04
     */
}

 

转载于:https://www.cnblogs.com/syj1993/p/8326196.html

<think>好的,用户想查找JavaScript中data.listTable的用法或实现。首先,我需要确定data.listTable是什么。可能是一个自定义的数据结构,或者某个库中的组件。在常见的JavaScript库中,比如React或Vue,可能有类似的结构,但用户提到的data.listTable可能是指特定的实现方式。先检查用户提供的引用内容。引用[1]提到JavaScript的条件语句和循环,引用[4]和[5]涉及配置和API构建,可能当前问题无关。引用[2]中的Diff2HtmlUI可能表格展示有关,但不确定是否直接相关。用户的问题集中在data.listTable,可能是一个对象属性,用于存储表格数据,比如数组对象。接下来,考虑可能的实现方式。通常,表格数据可能以数组形式存储,每个元素代表一行,包含列数据。例如,data.listTable可能是一个数组,每个元素是对象,键对应列名。需要举例说明如何定义和遍历这样的结构。 另外,用户可能在使用某些框架,比如在React中渲染表格,或者使用第三方库如DataTables.js。需要提供不同场景下的实现示例,包括原生JavaScript和常见库的用法。同时,需要提醒用户检查上下文,确认data.listTable的来源,比如自定义对象或API返回的数据结构。 可能的问题点包括作用域是否正确,数据结构是否符合预期,以及是否正确初始化。需要建议用户使用console.log或调试工具验证数据是否存在,结构是否正确。如果data未定义,需要检查变量声明和作用域。最后,生成相关问题,帮助用户深入理解,比如如何动态渲染表格、处理嵌套数据、排序过滤功能,以及常见库的使用方法。确保覆盖用户可能遇到的后续问题,提供扩展学习的途径。</think>在JavaScript中,`data.listTable` 不是一个内置对象或标准API,但根据命名推测可能是开发者自定义的数据结构,通常用于存储表格数据。以下是几种常见的实现方式及用法解析: --- ### 一、基础实现方式 #### 1. 数组对象结构 最常见的是将表格数据设计为**对象数组**,每个对象代表一行数据: ```javascript const data = { listTable: [ { id: 1, name: "Alice", age: 28 }, { id: 2, name: "Bob", age: 32 }, { id: 3, name: "Charlie", age: 25 } ] }; // 遍历表格数据 data.listTable.forEach(row => { console.log(`ID: ${row.id}, Name: ${row.name}`); }); ``` #### 2. 二维数组结构 对于简单表格,可能使用二维数组存储行列数据: ```javascript const data = { listTable: [ ["ID", "Name", "Age"], [1, "Alice", 28], [2, "Bob", 32] ] }; ``` --- ### 二、结合DOM操作 若需要将`data.listTable`渲染为HTML表格,可通过以下方式实现: ```javascript function renderTable(data) { const table = document.createElement('table'); data.listTable.forEach((row, index) => { const tr = table.insertRow(); Object.values(row).forEach(cell => { const td = tr.insertCell(); td.textContent = cell; }); }); document.body.appendChild(table); } ``` --- ### 三、常见问题排查 1. **未定义错误** - 检查`data`对象是否已正确初始化 - 确认作用域中是否存在`data`变量 2. **数据结构不匹配** - 使用`console.log(data.listTable)`验证数据结构 - 确保访问属性时使用正确的键名 --- ### 四、扩展应用场景 #### 1. 前端框架结合 在React中动态渲染表格: ```javascript function TableComponent({ data }) { return ( <table> <tbody> {data.listTable.map((row) => ( <tr key={row.id}> <td>{row.name}</td> <td>{row.age}</td> </tr> ))} </tbody> </table> ); } ``` #### 2. 使用第三方库 如通过`DataTables.js`实现高级表格功能: ```javascript $(document).ready(function() { $('#example').DataTable({ data: data.listTable, columns: [ { title: "ID", data: "id" }, { title: "Name", data: "name" } ] }); }); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值