当前位置: 首页 > 后端技术 > Java

【Java基础15】数据结构与泛型

时间:2023-04-01 22:50:05 Java

1.数据结构数据结构是底层组织和存储数据的一种方式,是指数据排列的方式。1.1堆叠特点:先进先出,后进先出类似于枪的子弹夹,压在弹夹底部的子弹最后发射。进出都在栈顶1.2队列特点:先进先出,后进后出类似于水管,先流入的水会先流出。传入的数据是队头,传出的数据是队尾。1.3数组通过索引查找数据因为有索引,查询速度较快,删除插入效率较低。1.4链表链表类似于角色游戏的情节。当上一个任务完成后,它会指向下一个任务。下面是链表的结构:完整链表示意图:向链表中插入数据:比较复杂的双向链表,不仅保存了下一条数据的地址,还保存了下一条数据的地址previousdata:特点:链表的存储地址不是连续的,因为有地址存放下一个数据。链表查询比较慢,每次都得从头开始。链表的增删改查比较快,修改地址指向即可。1.5二叉树字面意思是一棵树分成两个叉子,实际上是这样的结构。一个节点,然后在下面划分两个子节点,两个子节点再划分两个子节点,以此类推。结构图:特点:只有一个根节点,每个节点最多有两个同父节点为兄弟节点的子节点。每个父节点的度最大为2,最小为0。叶节点的高度为1,父节点的度为2,依此类推到根节点。根节点是第一层。1.5.1二叉树存储和快速查找根据节点左侧小于等于父节点,右侧大于父节点的规则,存储顺序便于查找和排序。下面创建一棵二叉树,每个叶子包括上节点、左节点、右节点和数据。//二叉树的示例publicclassLeaf{privateintdata;私人叶顶;私人叶子离开了;私有叶权;publicLeaf(){}publicLeaf(intdata){this.data=data;}//获取和设置}publicclassLeafTest{publicstaticvoidmain(String[]args){LeafsuperLeaf=null;int[]x={56,86,8,95,45,34,19,20};for(inti=0;ii){searchIndex(leaf.getLeft(),i);}}else{x=-1;}}}以上是一个简单的例子,实际的二叉树只有更宽的、完全二叉树、满二叉树、平衡二叉树和红黑树等。后续会开启一系列的详细解说。2、泛型是JDK1.5之后引入的特性,可以在编译阶段进行类型约束和检查。泛型只支持引用类型,集合系统的所有接口和实现类都支持泛型。泛型可以放在类、方法和接口上。2.1放在class上//格式,T只是一个泛型标识符,可以是任意表示,常用:T,K,V,Emodifierclassclassname{}//examplepublicclassMyArrayList{私有ArrayList列表=newArrayList();publicvoidadd(Tt){list.add(t);}publicvoidremove(Tt){list.remove(t);}}publicclassDemo{publicstaticvoidmain(String[]args){MyArrayListmyArrayList=newMyArrayList<>();myArrayList.add("一个");myArrayList.add("二");}}2.2泛型方法在方法中使用泛型方法,方便创建泛型方法。泛型用在方法上,这样可以接受任何类型,方法是泛型的。//格式修饰符返回类型方法名(参数列表){}publicclassMyFunction{publicstaticvoidprint(Tt){System.out.println(t);}}publicstaticvoidfunctionTest(){MyFunction.print("Hello!");MyFunction.print(3.14);}2.3通用接口//格式修饰符接口接口类名<通用变量>{}publicinterfaceMyInterface{voidprintln(Ee);}publicclassMyInterfaceImplimplementsMyInterface{@Overridepublicvoidprintln(Ee){System.out.println(e);}}publicstaticvoidinterfaceTest(){MyInterfaceImplmyInterface=newMyInterfaceImpl<>();//此时只能传String类型myInterface.println("haha");MyInterfaceImpl<整数>myInterface1=newMyInterfaceImpl<>();//此时只能传IntegerTypemyInterface1.println(11);}2.4Genericwildcard(?)Genericwildcard?,?通配符可以是任意类型,使用时有两种情况:\:通配符上一行,泛型只能是类型或类型的子类\:?通配符的下限,泛型只能是类型,或者其他类//示例publicclassGenericImpl{publicvoidgetSize(Collectioncollection){System.out.println(collection.size());}}publicstaticvoidtest(){GenericImplgeneric=newGenericImpl<>();Listlist=newArrayList<>();列表.添加(1);列表.添加(2);列表.添加(3);generic.getSize(列表);}3。在形式参数中,可以接收多个参数。它本质上是一个可变参数数组。传递参数更灵活。您不能传递一个、多个或一个数组。使用主要有以下特点:一个形参列表只能有一个形参variableparameters只能放在形参列表的末尾//formattype...参数名privatestaticvoidparamTest(String...strings){for(inti=0;i
最新推荐
猜你喜欢