<Java编程思想>持有对象(笔记)

卫星载荷应用方案 本文将从技术和应用层面探讨卫星载荷的应用方案,分析各个领域的特点和挑战,以期为卫星载荷的应用提供一定的指导和参考。卫星载荷应用方案涵盖了通信、地球观测、气象预报、导航定位等诸多领域在每一个领域中,都存在着不同的技术挑战和应用需求。随着技术的进步和需求的变化,卫星载荷应用方案将不断发展和完善,为人类社会的进步和发展做出更大的贡献。用户可以通过接收多颗卫星的信号,计算自身的位置和速度信息。在覆盖扩展方面,可以采用多星座、MEO、GEO 等不同轨道高度的卫星布局,结合卫星的特点和应用需求,实现覆盖范围的扩展。 阅读详情

持有对象,我们可以简单地理解为C++的数据结构,也可以简单地理解为数据的容器。比如List/Map/Set。

1、论泛型的重要性。

课本的简单例子是:

import java.util.ArrayList;

class Apple{}
class Orange{}
public class Generics {
    @SuppressWarnings("unchecked")
	public static void main(String[] args){
    	@SuppressWarnings("rawtypes")
		ArrayList apples = new ArrayList();
    	for(int i = 0; i < 3; i++)
    		apples.add(new Apple());
    	for(int i = 0; i < 3; i++)
    		apples.add(new Orange());
    	for(Object obj : apples)
    		System.out.println(obj);
    }
}
尽管Eclipse一再提醒错误,但是强制执行,并且加上@SuppressWarning之后,运行结果如下:

Apple@166afb3
Apple@9945ce
Apple@b5dac4
Orange@12d96f2
Orange@110003
Orange@17e4ca

这说明了什么呢:使用Java SE5之前的容器的一个主要的问题就是编译器允许你向容器中插入不正确的类型。

在上面的例子,由于没有加入泛型,使得ArrayList这个容器保存的是Object对象。所以在ArrayList里面我们可以插入原本不应该插入的Orange对象,且如果要把这个Orange对象当做Apple对象来使用,必须使用强制转型,不然会得到语法错误。但是转型之后会得到异常。这是不安全的做法。

加入泛型机制:很简单就是使用语法:ArrayList<Apple>

通过使用泛型,就可以在编译期防止将错误类型的对象放置到容器中。在编译期防止的意思是,如果我们在代码中使用了Orange对象并打算将其放到ArrayList<Apple>容器中,这个时候会得到一个错误。(其实由于我们现在使用的是Java 7版本,所以在上面错误的例子我们就可以看到编译器对容器泛型的强制要求了);通过使用泛型还有另外一个好处那就是我们不需要对取出来的对象进行类型的转换了,因为取出来的就是我们原先默认可以放进去的类的实例。

2、Java容器的基本概念

Collection:是一个独立元素的序列,这些独立的元素都服从一条或多条规则,List必须按照插入的顺序保存元素,而Set不能有重复的严肃,Queue按照排队规则来确定对象产生的顺序(这通常与它们被插入的顺序相同)

Map:一组成对的”键值对“对象,允许你使用键来查找值。它也被称为关联数组,或者被称为字典。

Collection下的接口有List和Set,List和Set又各自有自己的实现类,Map接口也有自己的几种实现。我们常常可以看到下面两种不同的构造方法:

List<Apple> apples = new ArrayList<Apple>();//注意List是可变长的。

ArrayList<Apple> apples = new ArrayList<Apple>();

在理想的情况下,我们编写的大部分代码都是在与这些接口打交道,并且我们唯一需要指定所使用的精确类型的容器的地方就是在创建的时候(new ArrayList<Apple>)。我们用这样子的构造方法,在创建一个具体的类的对象的时候将其转型为对应的接口(注意不是转型为其基类),然后在其余的代码中都使用这个接口。但是因为有些类具有额外的功能,比如LinkedList具有在List接口中未包含的额外的方法,TreeMap也具有在Map接口中未包含的方法,如果我们需要用到这些额外的方法,那就不能将它们向上转型为接口。

此外ArrayList还可以向上转型为更一般更通用的接口Collection(注意Collection是接口不是一个类)

比如下面的例子:

import java.util.ArrayList;
import java.util.Collection;
public class SimpleCollection {
   public static void main(String[] args){
	   Collection<Integer> c = new ArrayList<Integer>();
	   for(int i = 0; i < 10; i++)
		   c.add(i);
	   for(Integer i : c)
		   System.out.print(i+ " ");
   }
}
运行结果:0 1 2 3 4 5 6 7 8 9 

当然:Set<Integer> c =  new ArrayList<Integer>();这样子的写法是错误的。

在上面的例子中,我们使用了foreach的语法,所有的Collection都可以使用foreach语法进行遍历。

3、添加一组元素

直接入例子:

//import java.awt.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class AddingGroups {
    public static void main(String[] args){
    	Collection<Integer> collection = new ArrayList<Integer>(Arrays.asList(1,2,3,4,5));
    	Integer[] moreInts = {6,7,8,9,10};//注意Arrays.asList是中括号而这里是大括号
    	collection.addAll(Arrays.asList(moreInts));
    	//collection.addAll(moreInts);//注意这里报错,因为元素是一个数组而不是一个List类型
    	Collections.addAll(collection, 11,12,13,14,15);
    	Collections.addAll(collection, moreInts);
    	List<Integer> list = Arrays.asList(16,17,18,19,20);
    	list.set(1, 99);
    	for(Integer i : collection)
    		System.out.print(i + " ");
    	System.out.println();
    	for(Integer i : list)
    		System.out.print(i + " ");
    }
}
运行的结果:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 6 7 8 9 10 
16 99 18 19 20 

上面的例子需要掌握的是Arrays.asList还有Collection的addAll(注意与add增加一个单一元素的区别)。此外还需要对比的是Collection对象的addAll方法与Collections的addAll方法的区别。

总的来说,上面的例子想说明的是一个Collection对象可以完成创建的三种方式。

一种是使用Collecion的构造函数,参数为另一个实现Collection的类的对象(书本的翻译有点问题,说的是Collection作为参数)。比如拿Arrays.asList()返回的List作为构造函数的参数,注意List也是Collection的一种

另一种方式就是:使用Collection对象的addAll方法,参数也可以是一个已经实现了的Collection实现类的实例。

最后一种方法就是使用Collections.addAll()方法。注意参数与collection.addAll()方法不一样了。

Arrays.asList方法与Collections.addAll方法比collection.addAll方法来的灵活,因为它们使用的都是可变参数列表。体现在参数的个数上面。

4、容器的打印

1)数组的打印,如果我们没打算用循环来实现数组的打印,那一般我们必须使用Arrays.toString()方法来产生数组的可打印表示。

2)打印容器无需任何帮助,可以直接作为IO输出函数的参数。

import java.util.*;
public class Printing {
   static Collection<String> fill(Collection<String> collection){
	   collection.add("cat");
	   collection.add("dog");
	   collection.add("oxx");
	   collection.add("dog");
	   collection.add("hen");
	   return collection;
   }
   static Map<String,String> fill(Map<String,String> map){
	   map.put("dog", "Lucy");
	   map.put("cat", "Bosco");
	   map.put("dog", "Lucy2");
	   map.put("hen", "Spot");
	   return map;
   }
   public static void main(String[] args){
	   System.out.println(fill(new ArrayList<String>()));//是ArrayList<String>()不要忘记()
	   System.out.println(fill(new LinkedList<String>()));
	   System.out.println(fill(new HashSet<String>()));
	   System.out.println(fill(new TreeSet<String>()));
	   System.out.println(fill(new LinkedHashSet<String>()));
	   System.out.println(fill(new HashMap<String,String>()));
	   System.out.println(fill(new TreeMap<String,String>()));
	   System.out.println(fill(new LinkedHashMap<String,String>()));
   }
}
有意思的结果如下:

[cat, dog, oxx, dog, hen]
[cat, dog, oxx, dog, hen]
[oxx, cat, dog, hen]
[cat, dog, hen, oxx]
[cat, dog, oxx, hen]
{cat=Bosco, dog=Lucy2, hen=Spot}
{cat=Bosco, dog=Lucy2, hen=Spot}
{dog=Lucy2, cat=Bosco, hen=Spot}

通过上面的结果,我们至少可以发现以下的规律:1)容器Collection和Map可以直接打印;2)Set和Map的不同实现类有不同的存储方式;3)Map和Set的可打印版本表达方式不同;4)Map和Set不允许重复值(Map允许重复键值,不允许重复键)……

此外,Collection还有一个接口,是Queue,还有其他的,参考Java API文档。

我们知道如果不自己重写toString()方法,那么会调用Object或者是该类父类的toString()方法,这也说明了,Collection和Map的实现类都已经实现了自己的toString()方法。

下面对各个接口的近亲实现类进行一次比较。

List:

1)ArrayList:以数组实现的表

2)LinkedList:以链表实现的表。包含的操作多于ArrayList(参考Java API文档)

Set:

1)HashSet:顾名思义就是以哈希的方式存储元素的,最快的获取元素的方式就是哈希存储。所以这是三种Set中获取元素速度最快的。

2)TreeSet:如果存储顺序很重要,可以使用TreeSet,它按照结果的升序保存对象。

3)LinkedHashSet:按照被添加的顺序存储对象。

Map:

参考Set

5、List常用的方法:

contains()方法:remove()方法:顾名思义,这两种方法都会用到equals()方法。(为什么呢、)subList()方法允许我们很容易地从较大的列表中创建出一个片段;containsAll()则是判断是否含有某个子序列(其实Java的命名很有规则,containsAll与addAll……不过在人称上面有点混乱)

课本为了说明containsAll()方法与顺序无关,使用了Collections.sort()方法对原表进行排序,说获得的子序列,包含的结果依然为true。我觉得这是不严谨的,因为获得的子序列会根据原表的顺序变化而变化。我 自己使用的证明很简单:

System.out.println(fill(new ArrayList<String>()).containsAll(Arrays.asList("dog","cat")));
System.out.println(fill(new ArrayList<String>()).containsAll(Arrays.asList("cat","dog")));
上面两个语句在运行的时候都输出true这就证明了containsAll()方法与参数(子表)的顺序无关。

retainAll()方法是一种有效的“交集”操作,交集,不一定是连续的子表。

实例如下:

Collection<String> ls1 = fill(new ArrayList<String>(Arrays.asList("dog")));
	   System.out.println(ls1);//是ArrayList<String>()不要忘记()
	   Collection<String> ls2 = fill(new LinkedList<String>(Arrays.asList("cat","dog")));
	   System.out.println(ls2);
	   ls1.retainAll(ls2);
	   System.out.println("retainAll " + ls1);
输出:

[dog, cat, dog, oxx, dog, hen]
[cat, dog, cat, dog, oxx, dog, hen]
retainAll [dog, cat, dog, oxx, dog, hen]

而如果是:

Collection<String> ls1 = fill(new ArrayList<String>(Arrays.asList("cat")));
	   System.out.println(ls1);//是ArrayList<String>()不要忘记()
	   Collection<String> ls2 = fill(new LinkedList<String>(Arrays.asList("cat","dog")));
	   System.out.println(ls2);
	   ls1.retainAll(ls2);
	   System.out.println("retainAll " + ls1);
结果是:

[cat, cat, dog, oxx, dog, hen]
[cat, dog, cat, dog, oxx, dog, hen]
retainAll [cat, cat, dog, oxx, dog, hen]

可见连续与不连续并不是妨碍的关键。retailAll()方法返回的是boolean值,而且如果ls1.retainAll(ls2),则ls1变为他们的交集。反之也是,ls2也会变成它们的交集。这是奇怪的设计理念。且由于交集内可以存在重复的元素,如果是ls1去retainAll(ls2)则返回那些存在与ls2的ls1的元素集合,而反过来则是返回存在与ls1的ls2集合。所以这两种写法不等价!(这与文氏图不同的是,文氏图是Set,是没有重复的元素的)

我的意思是,如果ls1完全存在与ls2,那么返回的交集其实是ls2本身减去那些不存在ls1的元素,由于重复的可能性,返回的交集可能比ls1还长。

其他的方法诸如:removeAll 移除所有元素;set()表示将某个元素设置为另一个元素;addAll()方法可以接受两个参数,一个是index一个是新表,可以在表的中间插入新的列表,这比Collection的addAll()方法来得灵活,或者只能是插入到最后面的位置。(注意1:All表示操作对象是一个列表;注意2:参考collection.addAll()方法与Collections.addAll()方法与Arrays.asList()方法的区别)

isEmpty()方法,clear()方法,顾名思义。toArray()方法则是将Collection对象转为一个数组。

6、迭代器

1)使用方法iterator()要求容器返回一个Iterator.Iterator将准备好返回序列的第一个元素

2)使用next()获得序列中的下一个元素

3)使用hasNext()检查序列中是否还有下一个元素

4)使用remove()将迭代器新近返回的元素删除(是否会影响原序列的结构,我们来测试一下)

import java.util.*;
public class SimpleIterator {
   public static void main(String[] args){
	   List<Integer> ints = new ArrayList<Integer>(Arrays.asList(1,2,3,4,5,6,7,8,9));
	   Iterator<Integer> it = ints.iterator();
	   System.out.println(it);
	   System.out.println(it.next());
	   while(it.hasNext()){
		   Integer i = it.next();
		   System.out.print(i + " ");
	   }
	   System.out.println();
	   it = ints.iterator();//重返头部
	   for(int i = 0; i < 5; i++)
		   //it = it.next();这是错误的表示方法
		   it.next();
	   it.remove();
	   it = ints.iterator();
	   while(it.hasNext()){
		   Integer i = it.next();
		   System.out.print(i + " ");
	   }
   }
}
输出结果:

java.util.ArrayList$Itr@6bade9
1
2 3 4 5 6 7 8 9 
1 2 3 4 6 7 8 9 

在调用next()之前使用:it.remove();会得到下面的异常:

Exception in thread "main" java.lang.IllegalStateException
at java.util.ArrayList$Itr.remove(ArrayList.java:804)
at SimpleIterator.main(SimpleIterator.java:6)

书上的原文是:Iterator还可以移除由next()产生的最后一个元素,这意味着在调用remove()之前必须先调用next()。

课本还举了一个这样子的例子,说是有很多不同的容器(当然泛型是同样的类型),有一个display方法,我们需要这个方法可以忽略容器的类型而进行相同标准的打印。当然我们可以把容器所共有的(或者部分容器所共有的)接口作为参数(可以吗,比如Collection或者List有Iterator方法吗,Java API文档帮我们证实了,有)。

或者我们可以把Iterator<Type>作为display()方法的参数,而在main方法中就只需把各种容器的iterator作为参数传递进方法就可以了。


ListIterator就是双向的Iterator,hasPrevious()和hasNext()相似,同理ListIterator.previous()与next()相似。

7、LinkedList

1)getFirst() & element()完全一样  它们都返回列表的第一个元素,当列表为空,则抛NoSuchElement异常;peek()则是返回null

2)removeFirst() & remove()完全一样,移除并返回列表的头,而在列表为空的时候抛出NoSuchElement异常;poll则返回null  注意是头部不是尾部。

3)addFirst add addLast

4)removeLast

8、Stack忽略

9、Set忽略

10、Map

Map与数组和其他的Collection一样、可以很容易地拓展到多维,而我们只需要将其值设置为Map(这些Map的值可以是其他的容器,甚至是其他的Map)。比如Map<String,List<String>> 。

11、Queue

LinkedList提供了方法以支持队列的行为,并且它实现了Queue接口,因此LinkedList可以用作Queue的一种实现,通过将LinkedList向上转型为Queue(转为接口也叫做向上转型,屏蔽了某些下层的方法,只保留该接口层面的方法)。比如

Queue<Integer> queue = new LinkedList<Integer>();

offer()方法是与Queue相关的方法之一,它在允许的情况下将一个元素插入到队尾或者返回false。

peek() element()都是在不移除的情况下返回对头。不过peek()方法在队列为空的时候返回null而element()方法则抛出NoSuchElement异常。同理还有poll() remove()方法,作用是移除并返回队头(注意Queue的操作在头部)。(P开头的比较安全,不容易抛出异常)

优先队列:

当我们在PriorityQueue上调用offer()方法来插入一个对象是,这个对象会在队列中被排序。默认的排序将使用对象在队列中的自然顺序,但是我们可以通过提供自己的Comparator来修改这个顺序。PriorityQueue可以确保我们在调用peek()/poll()/remove()/element()的方法时,获取的元素将是队列中优先级最高的元素。

需要注意的是:PriorityQueue与Queue的一点不同是:

Queue<Integer> queue = new LinkedList<Integer>();或者是其他的实现类,因为Queue是个接口,而

PriorityQueue<Integer> pqueue = new PriorityQueue<Integer>();


下面的例子是一个Comparator来修改PriorityQueue的排序规则:参考自http://blog.youkuaiyun.com/hiphopmattshi/article/details/7334487

import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Queue;

public class test {
	private String name;
	private int population;
	public test(String name, int population)
	{
		this.name = name;
	    this.population = population;
	}
	public String getName()
	{
	     return this.name;
	}

	public int getPopulation()
	{
	     return this.population;
	}
	public String toString()
	{
	     return getName() + " - " + getPopulation();
	}
	public static void main(String args[])
	{
		Comparator<test> OrderIsdn =  new Comparator<test>(){//是个接口
			public int compare(test o1, test o2) {
				// TODO Auto-generated method stub
				int numbera = o1.getPopulation();
				int numberb = o2.getPopulation();
				if(numberb > numbera)
				{
					return 1;
				}
				else if(numberb<numbera)
				{
					return -1;
				}
				else
				{
					return 0;
				}
			
			}

			
			
		};
		Queue<test> priorityQueue =  new PriorityQueue<test>(11,OrderIsdn);
		
			    
			
		test t1 = new test("t1",1);
		test t3 = new test("t3",3);
		test t2 = new test("t2",2);
		test t4 = new test("t4",0);
		priorityQueue.add(t1);
		priorityQueue.add(t3);
		priorityQueue.add(t2);
		priorityQueue.add(t4);
		System.out.println(priorityQueue.poll().toString());
	}
}
PriorityQueue(int initialCapacity, Comparator<? super E> comparator) 
          Creates a PriorityQueue with the specified initial capacity that orders its elements according to the specified comparator.(这是Java API文档的介绍)还有其他的构造方法。

Comparator是个接口。

ZYNQ RFSoC 的DAC如何做到从 0到Fs频段 信号输出 之前一直没太了解 RFSoC 的DAC如何输出在 Fs/2 到 Fs 频率范围内的信号,例如 ZCU216中的 ZU49DR,其RF-DAC最大采样率是 9.85GSPS,如果想输出的信号中心频率在5.8G,它是如何有效输出在第二奈奎斯特区域范围的信号的。 阅读详情

相关推荐

kali虚拟机-----破解wifi密码(WiFi渗透)

文章目录一、将无线网卡挂载到 虚拟机上二、查看是否挂载成功三、查看网卡是否支持监听模式四、检查文件监听影响并杀死影响五、开启无线监听模式六、开始监听七、开始抓包(新建一个命令窗口)八、对已连接的终端进行攻击,使它掉线重连,以此来获取数据包。(新建一个命令窗口)九、开始解密 一、将无线网卡挂载到 虚拟机上 可能出现的问题:在可移动设备处无法连接无线网卡; 解决:在虚拟机设置中将usb控制器设置成如图所示。 注意要先关闭虚拟机在设置。 二、查看是否挂载成功 使用ifconfig命令查看 三、查看网卡是

weixin_46471800的博客 1万+

java类中拥有自身对象

java中经常可以看到拥有自身对象的属性,如下面所示:   public class TestSelfObject { private String b ="Hello"; private TestSelfObject a; //= new A(); 这里千万不能初始化 public void method(){ ...

panshaobinSB的博客 3343

ARIMA模型的R实现

1.模型简介 ARIMA模型,全称差分自回归移动平均模型。可以看作是差分运算和ARMA模型的结合。主要是针对具有线性趋势的非平稳的时间序列,来进行建模预测。 ARIMA模型的形式如下: Φ(B)∇

heirenmin的博客 1万+

第十一章:持有对象(容器)

如果一个程序知道所产生的对象的数量是以知的,那么这个程序是非常简单的 1.泛型和类型安全的容器 在JavaSE5之前,主要的问题就是编译器允许你向容器中插入不正确的类型。在引用容器中的对象的时候可能会类型转化错误。 引用了泛型之后,就可以让编译器校验去不去插入不正确的类型。 2.基本概念 Java容器类库中的用途是"保存对象" 1)Collection.一个独立元素的序列。List必须

Myboy的博客 400

MQTT阿里云OTA 调试记录

2.验证,这个验证是什么意思呢,就是阿里云会把你包的信息,比如包大小,streamid(相当于包的识别码),版本号发送给你的设备,然后如果你没发送升级成功的包给阿里云,这里会是一直验证中的状态,那你的设备每次重新连接阿里云,发送connect包给阿里云的时候,阿里云就会发送一次这个验证(upgrade)包。提取到了之后就可以发送请求包了,这个请求包比较坑,也可能是我没付费,他的包一次最多只有1024个字节的数据。之前说了,验证状态下,设备发送connect包给阿里云,阿里云就会发一个upgrade包给你。

qq_42585211的博客 1231

大华事件检测智能服务器,大华股份:高速公路智能事件检测 解决方案

1方案背景随着我国基础设施建设的飞速发展,公路尤其是高速公路的总里程数年年攀升。交通运输部统计数据显示,截止2017年底全国公路总里程477.35万公里,其中高速公路13.65万公里,位居世界第一。高速公路的运营和管理作为全国交通管理的重要组成部分日益受到严峻挑战,交通拥堵和事故频发已成为高速公路上非常突出的问题。抛洒物、行人、车辆不规则行驶等事件是导致以上结果的重要原因。基于视频分析的高速公路智...

weixin_39523887的博客 1822

【JAVA语法】持有对象--Java中List的用法

写在前面:    我也是一名java语言的爱好者,仅以此文作为学习的记录,对于文中出现的代码规范,代码格式,算法效率等问题,希望各路大神不吝赐教,在下感激不尽。同是学习的同学也同样希望互相交流,取长补短。                                                                                                  ...

偏执的缘由 1956

Ubuntu 22.04下Realtek R8125网卡驱动安装避坑指南(附DKMS自动编译配置)

本文详细介绍了在Ubuntu 22.04系统上为Realtek R8125 2.5GbE网卡安装驱动的完整流程与避坑指南。针对内核通用驱动r8169的冲突问题,重点讲解了如何通过DKMS(Dynamic Kernel Module Support)实现驱动的持久化自动编译与安装,确保系统内核升级后网卡驱动依然有效。内容包括环境准备、驱动源码获取、DKMS标准配置、驱动冲突解决(设置黑名单)以及日常维护与故障排查方法,旨在为用户提供一个一劳永逸的稳定解决方案。

echo99的专栏 1023

子类对象是包含整个父类对象仍是仅仅拥有父类对象的引用?

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34326429的博客 637

手把手教你用CEFSharp打造防关联指纹浏览器(附完整代码)

本文详细介绍了如何基于CEFSharp框架,从零开始构建一个企业级的防关联指纹浏览器。通过剖析核心架构、多进程隔离实现、动态指纹混淆(如Canvas、WebGL)的实战代码,以及代理集成与性能优化,为跨境电商、广告投放等场景提供了一套可控、安全的开源解决方案。

fern8的博客 961

MTK Meta ISP 工具使用技巧与参数读取路径全解析

在联发科(MediaTek, MTK)平台上进行相机图像调试时,Meta ISP 工具是连接 PC 与设备进行参数调整、寄存器读取和图像输出的重要工具。本文以实战角度出发,系统梳理 Meta ISP 的使用流程、关键模块功能、典型调试技巧与参数读取路径,结合最新版平台(如MTK Genio/Dimensity 系列)架构,帮助工程师掌握联发科图像调优的核心流程。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1148

<Java编程思想> 初始化与清理

1、静态初始化只有在必要的时刻才会进行。 静态初始化比如:static的变量成员,或者是一段跟在static关键字后面的代码。 public class Spoon{ static int i; static{ i = 47; } }这两种情况仅仅执行一次:当首次生成这个类的一个对象时,或者首次访问属于那个类的静态数据成员时(即使从未生成过那个类的对象)。 2、数组初始化

1ouis的专栏 975

AI算力网络与通信领域QoS保障的测试方法

在当今数字化时代,AI技术蓬勃发展,AI算力网络应运而生。它将分布在不同地理位置的算力资源进行整合,以高效地支持各种AI应用,如深度学习训练、智能图像识别等。而通信领域则是信息传输的基石,确保数据能够准确、快速地在不同节点之间传递。QoS保障在通信领域至关重要,它可以确保不同类型的业务(如语音通话、视频会议、在线游戏等)获得与其需求相匹配的服务质量。在AI算力网络中,QoS保障同样不可或缺,因为AI任务对网络的带宽、延迟、可靠性等指标有严格要求。

AI算力网络与通信的博客 526

<java编程思想>学习笔记16 第16章 数组

1,数组和其他种类的类的容器之间的区别有三个方面:效率,类型和保存基本类型的能力。   数组可以持有基本的类型,而泛型之前的容器则不能。但是有了泛型,容器就可以指定并检查它们所持有的对象的类型,   并且有了自动包装机制,容器看起来还能持有基本类型。   2,数组标示符其实只是一个引用,指向在堆中创建的一个真实的对象,这个数组对象用来保存指向其他对象定的引用。   对象数组和基本类...

liguangyuanyinli的博客 192

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

<java编程思想>学习笔记14 第14章 类型信息

1,运行时类型信息使得你可以在程序运行时发现和使用类型信息。   2,运行时识别对象和类的信息有两种方式:第一种方式:   传统的“RTTI”,它假定我们在编译时已经知道了所有的类型;第二种方式是“反射”机制,它允许我们在运行时发现和   使用类的信息。   3,为什么需要RTTI   面向对象的编程的基本目的是:让代码只操纵对基类的引用:   abstract class...

liguangyuanyinli的博客 285

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

<java编程思想>4th学习笔记(前言)

本人因为原来是C++程序员,3年前开始搞java的web方面的开发,搞C++的时候就没有 好好看过《C++编程思想》,光是搞MFC那一套,搞web开发的时候,由于工作忙碌,也没有 看过多少java语言的基础书籍,一来因为现在书籍比较贵,动辄上百的书是买不起,而来对 在的工作没什么必要,现在的工作主要是写一些简单的jdbc,文件读写,数据库操纵之类。 没用用到jav...

liguangyuanyinli的博客 137

<JAVA思想> 一切皆是对象!

为什么80%的码农都做不了架构师?>>> ...

weixin_34220834的博客 74

<java编程思想>学习笔记17 第17章 容器深入研究

1,jdk5增加如下接口:   Queue接口和实现PriorityQueue和各种风格的BlockingQueue. ConcurrentMap接口和实现ConcurrentHashMap.它们用于多线程机制。 CoppyOnWriteArrayList和CoppyOnWriteArraySet,它们也是用于多线程机制。 EnumSet和EnumMap,为了使用Enum而设计的Set...

liguangyuanyinli的博客 235

【Java】持有对象

如果一个程序只包含固定数量的且生命周期都是已知的对象,那么这是一个非常简单的程序。 通常,程序总是根据运行时才知道的某些条件去创建对象。在此之前,不会知道所需对象的数量,甚至不知道确切的类型。为解决这个普遍的编程问题,需要在任意时刻和任意位置创建任意数量的对象。所以,就不能依靠创建命名的引用来持有每一个对象: Mytype aReference; 一、泛型和类型安全的容器 当你制定了某个类...

天才小熊猫的博客 330

<java编程思想>(thing in java) 阅读笔记(第一章至第六章)

java语言支持四种类型:接口,类,数组和基本类型。 前三种类型通常被成为引用类型, 类实例和数组是对象,而基本类型的值则不是对象。 类的成员由它的域、方法、成员类和成员接口组成。 方法的签名由它的名称和所有参数类型组成,签名不包括它的返回类型。 类、接口、构造器、成员以及序列化形成被统称为API元素。 导出的API由所有可在定义该API的包之外访问的API元素组成。 静态工

SKY_L的博客 1357

java_web初学笔记之<java的反射机制>

首先明确java类中有什么信息? ①构造方法(构造器)Constructor ②属性(也成为字段)Field ③方法 Method ④包名 ⑤修饰符...等信息 ①②③这几个每一个都有public和非public之分。 Class类代表java类,一个类被类加载器加载到内存中,占用一片存储空间,这个空间里面的内容就是字节码,不同的类的字节码是不同的,所以它们在内存中的内容是不同的,这

bgk083的专栏 519

<Java 提高篇>阅读笔记

1、clone() 只是浅拷贝,深拷贝用Seriliaze

荒岛码农 397

java_web初学笔记之<java编程规范>

1 介绍(Introduction) 1.1 为什么要有编码规范(Why Have Code Conventions) 编码规范对于程序员而言尤为重要,有以下几个原因: - 一个软件的生命周期中,80%的花费在于维护 - 几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护 - 编码规范可以改善软件的可读性,可以让程序员尽快而彻底地理解新的代码 - 如果你将源码作为产品发

bgk083的专栏 1415

<JAVA学习笔记三>——集合

集合

小冯的Blog 415

<java编程思想>4th学习笔记2(第一章,对象导论)

1,java是真正面向对象的语言。 2,[b]包访问权限[/b],类没有public,protected,private关键系修饰时,类可以调 用同一个包的其他类的方法,但在包之外,这些成员如同指定了private一样。 3,复用 组合(composition):使用现有的类合成新的类; 聚合(aggregation):如果组合是动态发生的,称为聚合。 4,前期...

liguangyuanyinli的博客 161

<Java编程那些事>读书笔记

解释程序就是运行环境一句一句的读取源代码,然后执行。翻译程序,就是讲源代码一次翻译成计算机系统可以直接执行的机器指令的文件。 Java采用的是先编译、再解释的执行方式。也就是先把Java语言的源代码编译成中间代码class文件,然后再运行时根据class文件的内容解释执行。 自动类型转换:byteàshort(char)àintàlongàfloat-àdouble 短路现象,对于&am...

weixin_34128237的博客 105
上一篇: <Java编程思想> 初始化与清理
下一篇: <未完>再次研究指针和引用
louis9212
博客等级 码龄14年 8粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值