泛型

集合框架、单列集合体系、Collection、Iterator迭代器、泛型、上限&下限【学习笔记】

匿名 (未验证) 提交于 2019-12-03 00:42:01
一、单列集合 1.单列集合体系 Collection List Set ArrayList LinkedList HashSet LinkedHashSet List :存取有序、有索引、还可以存储重复的元素 ArrayList:底层是数组实现的,有索引,查询快、增删慢 LinkedList:底层是链表实现的,有索引,查询慢、增删快 Set : 存取无序、没有索引、不可以存储重复的元素 HashSet:底层是哈希表+红黑树的,存取无序、没有索引、不可以存储重复的元素 LinkedHashSet:底层是链表+哈希表实现的,可以保证存取顺序,没有索引、不可以存储重复的元素 2.Collection接口中的共性的功能 boolean add(E e); 向集合中添加元素 void clear(); 清空集合所有的元素 boolean remove(E e); 删除指定的元素 boolean contains(E e); 判断集合中是否包含传入的元素 boolean isEmpty(); 判断集合是否为空 int size(); 获取集合的长度 Object[] toArray(); 将集合转成数组 示例代码: public class Demo01Collection { public static void main (String[] args) { //创建集合对象,可以使用多态

.NET 泛型中的逆变 和 协变

匿名 (未验证) 提交于 2019-12-03 00:34:01
逆变和协变是.net 4.0 版本中推出了的概念, 只能在泛型委托 和 泛型接口中使用, 当我们在给泛型变量赋值的时候, 如果赋值表达式看着很安全和谐就是协变, 反之就是逆变 1. 协变 (out) 我们都知道泛型接口的泛型参数不一样时, 默认情况下是不能赋值的, 就算参数存在继承关系也是不行的 如下: 1 Interface1 < string > obj1 = null ; 2 3 Interface1 < object > obj2 = obj1 4 5 // 这个赋值操作是不允许的, obj1 和 obj2是两个完全不相同的对象 如果接口的泛型参数标注为协变了, 那么就可以使表达式成立, 前提泛型参数之间存在继承关系 如下: 1 // 定义接口 2 3 Interface Interface1 < out T > { 4 5 } 6 7 // 在这种情况下表达式是成立的 8 9 Interface1 < string > obj1 = null ; 10 11 Interface1 < object > obj2 = obj1 接口的泛型参数标注为协变, 那么在接口定义的时候 这个泛型参数就不能作为入参传入, 至于原因如下 1 // 定义接口 2 3 Interface Interface1 < out T > { 4 5 } 6 7 8 9 Interface1 <

软件构造笔记 3.4 Object-Oriented Programming (OOP)

匿名 (未验证) 提交于 2019-12-03 00:34:01
类变量和类方法与类相关联,并且每个类都会出现一次。使用它们不需要创建对象。实例方法和变量会在每个类的实例中出现一次。 静态方法不与任何特定的类实例关联,而实例方法(不带 static 关键字声明)必须在特定对象上调用。 1. 接口(interface): Java 的接口是一种用于设计和表达 ADT 的有用语言机制,其实现方式是实现该接口的类。接口之间可以继承,一个类也可以实现多个接口,一个接口也可以有多个实现。ADT由Interface和class定义和实现。其中接口用于确定ADT规约,类用于实现ADT。 打破了抽象边界,接口定义中没有包含 constructor ,也无法保证所有实现类中都包含了同样名字的 constructor 。故而,客户端需要知道该接口的某个具体实现类的名字 接口的优点:接口仅仅指定了客户端的合同;抽象数据类型的多个不同表示可以共同存在于同一个程序中,与实现接口的不同类相同。 多种实现的原因:由不同的表现能选择最适合您使用的实施方案;由不同的行为能选择你想要的实现;通常,性能和行为都有所不同。 2. 封装和信息隐藏 区分精心设计的模块和不好的模块的唯一最重要的因素是其隐藏内部数据和其他模块的其他实施细节的程度 设计良好的代码隐藏了所有实现细节,将 API 与实现完全分离,模块只通过 API 进行通信,彼此的内在运作没有联系。 信息隐藏的优势

SSH笔记-泛型依赖注入

匿名 (未验证) 提交于 2019-12-03 00:26:01
1、作用:为子类注入子类对应的泛型类型的成员变量的引用 2、文件 ①TestMain.java:测试类 ②Info.java:数据模型 ③InfoService.java:测试继承BaseService ④InfoRepository.java:测试继承BaseRepository ⑤BaseService.java:被继承的类 ⑥BaseRepository.java:被继承的类 ⑦genericsContext.xml:配置文件 3、用法: (1)运行逻辑: ①基类为BaseService和BaseRepository,BaseService引用了BaseRepository,则可以通过BaseService调用BaseRepository属性方法 ②当InfoService和InfoRepository分别继承BaseService和BaseRepository时,需要为BaseService和BaseRepository的泛型定义 ③当InfoService和InfoRepository分别继承完毕之后,根据泛型依赖注入的特性,InfoService和InfoRepository会参照BaseService引用了BaseRepository的引用关系自动建立对应引用关系,这就是泛型依赖注入 (2)调用顺序: ①Main调用InfoService

泛型

匿名 (未验证) 提交于 2019-12-03 00:26:01
引入泛型 观察代码: class Point{ private Object x; private Object y; public Object getX() { return x; } public void setX(Object x) { this.x = x; } public Object getY() { return y; } public void setY(Object y) { this.y = y; } } 范例:实现int整型数据 public class Listenf { public static void main(String[] args) { //第一层次:设置坐标数据 Point point=new Point(); point.setX(10);//向上转型为Object point.setY(20);//向上转型为Object //第二层次:取得坐标数据 int x=(Integer)point.getX();//向下转型 int y=(Integer)point.getY();//向下转型 System.out.println("x="+x+"y="+y); } } 范例:实现doublic型数据 public class Listenf { public static void main(String[] args) { /

C# 泛型理解

匿名 (未验证) 提交于 2019-12-03 00:22:01
泛型是 2.0 版 C# 语言和公共语言运行库 (CLR) 中的一个非常重要的新功能。在此之前进行数据转化时候需要进行装箱与拆箱操作。我们知道装箱与拆箱需要消耗很大性能,泛型的引用主要优点是性能。 在学习泛型之前我们先了解一下值类型,引用类型以及装箱,拆箱。 值类型存储在栈上,引用类型存储在堆上。C#的类是引用类型,结构是值类型。.NET很容易把值类型转换成引用类型,例如int类型的值可以任意赋值给一个对象,反之,任意一个装箱后的值类型可以进行转换成引用类型,这个过程我们称之为拆箱操作,拆箱时,需要进行类型的强制转换。 下面我们拿ArrayList为例来说明一下拆箱与装箱: static void Main(string[] args) { ArrayList list = new ArrayList(); //ArrayList.Add(object value)方法,可以看出传入的参数为object类型 list.Add(10);//这里传入int类型10,则进行装箱操作 //如果这时候我们想获取这个int类型 //int value = list[0];//如果这里不做强转则会报出异常:无法将类型“object”转成“int”,需要进行强转。这里也可以看出int类型存入list后进行了装箱操作 int value = (int)list[0]; /

泛型-泛型代码和虚拟机

匿名 (未验证) 提交于 2019-12-03 00:19:01
public class Pair { private Object first; private Object second ; public Pair() { first= null ; second = null ; } public Pair( Object firsObject, Object second ) { this .first = firsObject; this . second = second ; } public Object geObjectFirsObject() { return first; } public void seObjectFirsObject( Object firsObject) { this .first = firsObject; } public Object geObjectSecond() { return second ; } public void seObjectSecond( Object second ) { this . second = second ; } } public class Pair { private Comparable first; private Comparable second ; public Pair() { first= null ; second = null ; }

泛型方法

匿名 (未验证) 提交于 2019-12-03 00:19:01
在之前定义的类或接口上发现都可以在里面的方法中继续使用泛型, 这种方法就称为泛型方法,但是泛型方法不一定非定义在泛型类或接口里面, 也可以单独定义。 范例:定义泛型方法 public class TestDemo{ public static void main(String[] args) { Integer data []=fun(1,2,3,4); for(int temp:data) {//自动拆箱:将对象中的基本数据从对象中自动取出 System.out.println(temp); } } public static <T> T[] fun(T...args) { return args; } } 最好不要在你们自己的代码中出现此类程序,不过JDK文档里面此类程序很多。 文章来源: 泛型方法

泛型

匿名 (未验证) 提交于 2019-12-03 00:18:01
方法定义: public <T> T creatNew (T bean) { return apiServer; } public <T> T creatNew1 (Class<T> bean) throws IllegalAccessException, InstantiationException { return apiServer.newInstance(); } public <T> T creatNew2 (Class<?> bean) throws IllegalAccessException, InstantiationException { return (T) apiServer.newInstance(); } public Object creatNew3 (Class<?> apiServer) throws IllegalAccessException, InstantiationException { return apiServer.newInstance(); } 调用方式: int aNew = creatNew( 10 ); try { String bNew = creatNew1( "" .getClass()); boolean cNew = creatNew2( "" .getClass()); int dNew = creatNew2

泛型的基本使用

匿名 (未验证) 提交于 2019-12-03 00:18:01
说的简单一点, 所谓 的泛型指的就是:在类定义的时候并不会设置类中的属性或方法中的参数的具体类型,而是在类使用的时候在进行定义。 所以如果要想进行这种泛型的操作,就必须做一个类型标记的声明。 范例:定义Point类 class Point <T>{//T表示参数,是一个占位的标记 private T x; private T y; public T getX() { return x; } public void setX(T x) { this.x = x; } public T getY() { return y; } public void setY(T y) { this.y = y; } } public class TestDemo { public static void main(String[] args) { //第一步:设置数据 Point <String>p=new Point<>();//JDK1.7 JDK1.5 p.setX("东经10度"); } 当开发的程序可以避免向下转型,也就意味着这种安全隐患呗消除了。 尽量不要去使用向下转型。 这一切的目的都是为了回避Cla ClassCastException 文章来源: 泛型的基本使用